git.asbjorn.biz
/
swftools.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
bb7e432
)
added missing type conversions
author
kramm
<kramm>
Fri, 19 Dec 2008 08:04:09 +0000
(08:04 +0000)
committer
kramm
<kramm>
Fri, 19 Dec 2008 08:04:09 +0000
(08:04 +0000)
lib/as3/parser.y
patch
|
blob
|
history
diff --git
a/lib/as3/parser.y
b/lib/as3/parser.y
index
fca6a2a
..
c64fb41
100644
(file)
--- a/
lib/as3/parser.y
+++ b/
lib/as3/parser.y
@@
-645,8
+645,19
@@
void breakjumpsto(code_t*c, code_t*jump)
}
code_t*converttype(code_t*c, class_signature_t*from, class_signature_t*to)
{
}
code_t*converttype(code_t*c, class_signature_t*from, class_signature_t*to)
{
- /* TODO */
- return abc_nop(c);
+ if(!to) {
+ /*TODO: can omit this if from is zero? */
+ return abc_coerce_a(c);
+ }
+ if(TYPE_IS_NUMBER(from) && TYPE_IS_UINT(to)) {
+ MULTINAME(m, TYPE_UINT);
+ return abc_coerce2(c, &m);
+ }
+ if(TYPE_IS_NUMBER(from) && TYPE_IS_INT(to)) {
+ MULTINAME(m, TYPE_INT);
+ return abc_coerce2(c, &m);
+ }
+ return c;
}
code_t*defaultvalue(code_t*c, class_signature_t*type)
}
code_t*defaultvalue(code_t*c, class_signature_t*type)
@@
-804,7
+815,7
@@
FOR_INIT : {$$=code_new();}
FOR_INIT : ASSIGNMENT | VARIABLE_DECLARATION | VOIDEXPRESSION
FOR : "for" '(' {new_state();} FOR_INIT ';' EXPRESSION ';' VOIDEXPRESSION ')' CODEBLOCK {
FOR_INIT : ASSIGNMENT | VARIABLE_DECLARATION | VOIDEXPRESSION
FOR : "for" '(' {new_state();} FOR_INIT ';' EXPRESSION ';' VOIDEXPRESSION ')' CODEBLOCK {
- code_append($$, state->initcode);state->initcode=0;
+ $$ = state->initcode;state->initcode=0;
$$ = code_append($$, $4);
code_t*loopstart = $$ = abc_label($$);
$$ = code_append($$, $4);
code_t*loopstart = $$ = abc_label($$);
@@
-953,28
+964,30
@@
E : '(' E ')' {$$=$2;}
E : '-' E {$$=$2;}
E : LH "+=" E {$$.c = $1.read;$$.c=code_append($$.c,$3.c);$$.c=abc_add($$.c);
E : '-' E {$$=$2;}
E : LH "+=" E {$$.c = $1.read;$$.c=code_append($$.c,$3.c);$$.c=abc_add($$.c);
- MULTINAME(m, registry_getintclass());
- $$.c=abc_coerce2($$.c, &m); // FIXME
+ class_signature_t*type = join_types($1.type, $3.t, '+');
+ $$.c=converttype($$.c, type, $1.type);
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}
E : LH "-=" E {$$.c = $1.read;$$.c=code_append($$.c,$3.c);$$.c=abc_add($$.c);
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}
E : LH "-=" E {$$.c = $1.read;$$.c=code_append($$.c,$3.c);$$.c=abc_add($$.c);
- MULTINAME(m, registry_getintclass());
- $$.c=abc_coerce2($$.c, &m); // FIXME
+ class_signature_t*type = join_types($1.type, $3.t, '-');
+ $$.c=converttype($$.c, type, $1.type);
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}
// TODO: use inclocal where appropriate
E : LH "++" {$$.c = $1.read;$$.c=abc_increment($$.c);
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}
// TODO: use inclocal where appropriate
E : LH "++" {$$.c = $1.read;$$.c=abc_increment($$.c);
- MULTINAME(m, registry_getintclass());
- $$.c=abc_coerce2($$.c, &m); //FIXME
+ class_signature_t*type = $1.type;
+ if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) type = TYPE_NUMBER;
+ $$.c=converttype($$.c, type, $1.type);
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}
E : LH "--" {$$.c = $1.read;$$.c=abc_decrement($$.c);
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}
E : LH "--" {$$.c = $1.read;$$.c=abc_decrement($$.c);
- MULTINAME(m, registry_getintclass());
- $$.c=abc_coerce2($$.c, &m); //FIXME
+ class_signature_t*type = $1.type;
+ if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) type = TYPE_NUMBER;
+ $$.c=converttype($$.c, 0, $1.type);
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}
$$.c=abc_dup($$.c);$$.c=code_append($$.c,$1.write);
$$.t = $1.type;
}