Author: fperrad
Date: Mon Feb 20 23:29:48 2006
New Revision: 11694
Modified:
trunk/languages/lua/Lua/build.pm
trunk/languages/lua/Lua/lexer.pm
trunk/languages/lua/pmc/luanumber.pmc
trunk/languages/lua/t/number.t
Log:
Lua :
- format number as original Lua
- fix in lexer
- and tests
Modified: trunk/languages/lua/Lua/build.pm
==============================================================================
--- trunk/languages/lua/Lua/build.pm (original)
+++ trunk/languages/lua/Lua/build.pm Mon Feb 20 23:29:48 2006
@@ -114,11 +114,11 @@ sub InsertList {
sub BuildLiteral {
my ($parser, $value, $type) = @_;
- my $name = "cst_" . $parser->YYData->{idx_cst}++;
my $defn = $parser->YYData->{symbtab_cst}->Lookup($type . $value);
if ($defn) {
return [$defn, []];
} else {
+ my $name = "cst_" . $parser->YYData->{idx_cst}++;
my @opcodes = ();
$defn = new defn($name, "const", "pmc", $type);
$parser->YYData->{symbtab_cst}->Insert($type . $value, $defn);
Modified: trunk/languages/lua/Lua/lexer.pm
==============================================================================
--- trunk/languages/lua/Lua/lexer.pm (original)
+++ trunk/languages/lua/Lua/lexer.pm Mon Feb 20 23:29:48 2006
@@ -266,7 +266,7 @@ sub _Lexer {
s/^(\d+(\.\d*)?|\.\d+)([Ee][+\-]?\d+)?//
# and return ('NUMBER', new
Math::BigFloat($1));
- and return ('NUMBER', $1);
+ and return ('NUMBER', $1 . ($3 || ""));
s/^\"//
and return
$parser->_DoubleQuoteStringLexer();
Modified: trunk/languages/lua/pmc/luanumber.pmc
==============================================================================
--- trunk/languages/lua/pmc/luanumber.pmc (original)
+++ trunk/languages/lua/pmc/luanumber.pmc Mon Feb 20 23:29:48 2006
@@ -22,6 +22,8 @@ the Lua C<Number> type.
#include "parrot/parrot.h"
#include "pmc_luastring.h"
+#define LUA_NUMBER_FMT "%.14g"
+
static STRING *luanumber_name;
static INTVAL dynpmc_LuaString;
@@ -138,7 +140,8 @@ Returns a Parrot string representation o
*/
STRING* get_string () {
- return string_from_num(INTERP, PMC_num_val(SELF));
+ FLOATVAL f = PMC_num_val(SELF);
+ return Parrot_sprintf_c(INTERP, LUA_NUMBER_FMT, f);
}
/*
Modified: trunk/languages/lua/t/number.t
==============================================================================
--- trunk/languages/lua/t/number.t (original)
+++ trunk/languages/lua/t/number.t Mon Feb 20 23:29:48 2006
@@ -18,7 +18,7 @@ use strict;
use FindBin;
use lib "$FindBin::Bin";
-use Parrot::Test tests => 44;
+use Parrot::Test tests => 45;
use Test::More;
language_output_is( 'lua', <<'CODE', <<'OUT', '-1' );
@@ -286,3 +286,13 @@ CODE
/attempt to compare \w+ with \w+/
OUT
+language_output_is( 'lua', <<'CODE', <<'OUT', '1e9' );
+print(1000000000)
+print(1e9)
+print(1.0e+9)
+CODE
+1000000000
+1000000000
+1000000000
+OUT
+