mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-05-06 12:22:16 +00:00
Make sure changetype works
This commit is contained in:
parent
dc78fc8d20
commit
2b182b505e
@ -10,7 +10,7 @@ import {
|
|||||||
Range
|
Range
|
||||||
} from "./tokenizer";
|
} from "./tokenizer";
|
||||||
|
|
||||||
import{
|
import {
|
||||||
CharCode
|
CharCode
|
||||||
} from "./util/charcode";
|
} from "./util/charcode";
|
||||||
|
|
||||||
|
@ -694,11 +694,11 @@ export function compileCall(compiler: Compiler, prototype: FunctionPrototype, ty
|
|||||||
if (!validateCall(compiler, typeArguments, 1, operands, 1, reportNode))
|
if (!validateCall(compiler, typeArguments, 1, operands, 1, reportNode))
|
||||||
return module.createUnreachable();
|
return module.createUnreachable();
|
||||||
arg0 = compiler.compileExpression(operands[0], Type.void, ConversionKind.NONE);
|
arg0 = compiler.compileExpression(operands[0], Type.void, ConversionKind.NONE);
|
||||||
if ((compiler.currentType == usizeType && (<Type[]>typeArguments)[1].classType) || (compiler.currentType.classType && (<Type[]>typeArguments)[1] == usizeType)) {
|
if ((compiler.currentType == usizeType && (<Type[]>typeArguments)[0].classType) || (compiler.currentType.classType && (<Type[]>typeArguments)[0] == usizeType)) {
|
||||||
compiler.currentType = (<Type[]>typeArguments)[1];
|
compiler.currentType = (<Type[]>typeArguments)[0];
|
||||||
return arg0;
|
return arg0;
|
||||||
}
|
}
|
||||||
compiler.error(DiagnosticCode.Type_0_cannot_be_changed_to_type_1, reportNode.range, (<Type[]>typeArguments)[0].toString(), (<Type[]>typeArguments)[1].toString());
|
compiler.error(DiagnosticCode.Type_0_cannot_be_changed_to_type_1, reportNode.range, compiler.currentType.toString(), (<Type[]>typeArguments)[0].toString());
|
||||||
return module.createUnreachable();
|
return module.createUnreachable();
|
||||||
|
|
||||||
case "assert": // assert(isTrue: bool) -> void
|
case "assert": // assert(isTrue: bool) -> void
|
||||||
|
@ -1506,7 +1506,17 @@ export class Parser extends DiagnosticEmitter {
|
|||||||
return Node.createFloatLiteral(tn.readFloat(), tn.range(startPos, tn.pos));
|
return Node.createFloatLiteral(tn.readFloat(), tn.range(startPos, tn.pos));
|
||||||
|
|
||||||
// RegexpLiteralExpression
|
// RegexpLiteralExpression
|
||||||
case Token.REGEXPLITERAL:
|
/*
|
||||||
|
case Token.SLASH:
|
||||||
|
var regexpLit = Node.createRegexpLiteral(tn.readRegexp(), tn.range(startPos, tn.pos));
|
||||||
|
if (!tn.skip(Token.SLASH)) {
|
||||||
|
this.error(DiagnosticCode._0_expected, tn.range(), "/");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// TODO: modifiers, may be move to tokenizer
|
||||||
|
return regexpLit;
|
||||||
|
*/
|
||||||
|
case Token.REGEXPLITERAL: // not yet supported
|
||||||
return Node.createRegexpLiteral(tn.readRegexp(), tn.range(startPos, tn.pos));
|
return Node.createRegexpLiteral(tn.readRegexp(), tn.range(startPos, tn.pos));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -3,14 +3,14 @@
|
|||||||
(type $fff (func (param f32 f32) (result f32)))
|
(type $fff (func (param f32 f32) (result f32)))
|
||||||
(type $iiii (func (param i32 i32 i32) (result i32)))
|
(type $iiii (func (param i32 i32 i32) (result i32)))
|
||||||
(type $ifff (func (param i32 f32 f32) (result f32)))
|
(type $ifff (func (param i32 f32 f32) (result f32)))
|
||||||
(type $iv (func (param i32)))
|
(type $ii (func (param i32) (result i32)))
|
||||||
(type $v (func))
|
(type $v (func))
|
||||||
(global $class/Animal.ONE (mut i32) (i32.const 1))
|
(global $class/Animal.ONE (mut i32) (i32.const 1))
|
||||||
(memory $0 1)
|
(memory $0 1)
|
||||||
(export "test" (func $class/test))
|
(export "test" (func $class/test))
|
||||||
(export "memory" (memory $0))
|
(export "memory" (memory $0))
|
||||||
(start $start)
|
(start $start)
|
||||||
(func $class/test (; 0 ;) (type $iv) (param $0 i32)
|
(func $class/test (; 0 ;) (type $ii) (param $0 i32) (result i32)
|
||||||
(local $1 i32)
|
(local $1 i32)
|
||||||
(local $2 i32)
|
(local $2 i32)
|
||||||
(local $3 i32)
|
(local $3 i32)
|
||||||
@ -63,6 +63,7 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
(get_local $0)
|
||||||
)
|
)
|
||||||
(func $start (; 1 ;) (type $v)
|
(func $start (; 1 ;) (type $v)
|
||||||
(local $0 i32)
|
(local $0 i32)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
(type $fff (func (param f32 f32) (result f32)))
|
(type $fff (func (param f32 f32) (result f32)))
|
||||||
(type $iiii (func (param i32 i32 i32) (result i32)))
|
(type $iiii (func (param i32 i32 i32) (result i32)))
|
||||||
(type $ifff (func (param i32 f32 f32) (result f32)))
|
(type $ifff (func (param i32 f32 f32) (result f32)))
|
||||||
(type $iv (func (param i32)))
|
(type $ii (func (param i32) (result i32)))
|
||||||
(type $v (func))
|
(type $v (func))
|
||||||
(global $class/Animal.ONE (mut i32) (i32.const 1))
|
(global $class/Animal.ONE (mut i32) (i32.const 1))
|
||||||
(memory $0 1)
|
(memory $0 1)
|
||||||
@ -50,7 +50,7 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(func $class/test (; 4 ;) (type $iv) (param $0 i32)
|
(func $class/test (; 4 ;) (type $ii) (param $0 i32) (result i32)
|
||||||
(drop
|
(drop
|
||||||
(call $class/Animal#instanceAdd
|
(call $class/Animal#instanceAdd
|
||||||
(get_local $0)
|
(get_local $0)
|
||||||
@ -65,6 +65,7 @@
|
|||||||
(f32.const 2)
|
(f32.const 2)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
(get_local $0)
|
||||||
)
|
)
|
||||||
(func $start (; 5 ;) (type $v)
|
(func $start (; 5 ;) (type $v)
|
||||||
(drop
|
(drop
|
||||||
|
@ -16,7 +16,11 @@ Animal.ONE;
|
|||||||
Animal.add(1,2);
|
Animal.add(1,2);
|
||||||
Animal.sub<f32>(1, 2);
|
Animal.sub<f32>(1, 2);
|
||||||
|
|
||||||
export function test(animal: Animal<f64>): void {
|
export function test(animal: Animal<f64>): Animal<f64> {
|
||||||
animal.instanceAdd(1, 2);
|
animal.instanceAdd(1, 2);
|
||||||
animal.instanceSub<f32>(1, 2);
|
animal.instanceSub<f32>(1, 2);
|
||||||
|
|
||||||
|
var ptr = changetype<usize>(animal);
|
||||||
|
var cls = changetype<Animal<f64>>(ptr);
|
||||||
|
return cls;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
(type $fff (func (param f32 f32) (result f32)))
|
(type $fff (func (param f32 f32) (result f32)))
|
||||||
(type $iiii (func (param i32 i32 i32) (result i32)))
|
(type $iiii (func (param i32 i32 i32) (result i32)))
|
||||||
(type $ifff (func (param i32 f32 f32) (result f32)))
|
(type $ifff (func (param i32 f32 f32) (result f32)))
|
||||||
(type $iv (func (param i32)))
|
(type $ii (func (param i32) (result i32)))
|
||||||
(type $v (func))
|
(type $v (func))
|
||||||
(global $class/Animal.ONE (mut i32) (i32.const 1))
|
(global $class/Animal.ONE (mut i32) (i32.const 1))
|
||||||
(global $HEAP_BASE i32 (i32.const 4))
|
(global $HEAP_BASE i32 (i32.const 4))
|
||||||
@ -59,7 +59,9 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(func $class/test (; 4 ;) (type $iv) (param $0 i32)
|
(func $class/test (; 4 ;) (type $ii) (param $0 i32) (result i32)
|
||||||
|
(local $1 i32)
|
||||||
|
(local $2 i32)
|
||||||
(drop
|
(drop
|
||||||
(call $class/Animal#instanceAdd
|
(call $class/Animal#instanceAdd
|
||||||
(get_local $0)
|
(get_local $0)
|
||||||
@ -74,6 +76,19 @@
|
|||||||
(f32.const 2)
|
(f32.const 2)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
(block
|
||||||
|
(set_local $1
|
||||||
|
(get_local $0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(block
|
||||||
|
(set_local $2
|
||||||
|
(get_local $1)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(return
|
||||||
|
(get_local $2)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
(func $start (; 5 ;) (type $v)
|
(func $start (; 5 ;) (type $v)
|
||||||
(if
|
(if
|
||||||
|
Loading…
x
Reference in New Issue
Block a user