Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Agregando tipos a JS

Agregando tipos a JS

Avatar for Franco Castellacci

Franco Castellacci

June 01, 2017

Other Decks in Programming

Transcript

  1. function add(x/** @type {int} */, y/** @type {int} */) {

    var f = x + 0.5; return x + y + f/** @type {float} */; }
  2. var int = 1; /** @type {int} */ var float

    = 1.5; /** @type {float} */ var bool = true; /** @type {bool} */ var string = "a string"; /** @type {str} */ var intArr = [1, 2]; /** @type {array<int>} */ var floatArr = [1.5, 2.5]; /** @type {array<float>} */ var obj = {} /** @type {obj} */
  3. • this.state /** @type {int} */ = this.state /** @type

    {int} */ & STATE_NOT_HELD /** @type {int} */; s3[LikelyCanBeTaggedValue_Int] = LdFld s7(s2<s10>[Object]->state)[LikelyCanBeTaggedValue_Int] Bailout: (BailOutFailedEquivalentTypeCheck) s4[LikelyCanBeTaggedValue_Int] = LdRootFld s8(s1[Object]->STATE_NOT_HELD)[LikelyCanBeTaggedValue_Int] s14(s3).i32 = FromVar s3[LikelyCanBeTaggedValue_Int] Bailout: (BailOutOnNotPrimitive) s15(s4).i32 = FromVar s4[LikelyCanBeTaggedValue_Int] Bailout: (BailOutOnNotPrimitive)
  4. • this.state /** @type {int} */ = this.state /** @type

    {int} */ & STATE_NOT_HELD /** @type {int} */; s3[CanBeTaggedValue_Int] = LdFld s7(s2<s10>[Object]->state)[CanBeTaggedValue_Int] Bailout: (BailOutFailedEquivalentTypeCheck) s4[CanBeTaggedValue_Int] = LdRootFld s8(s1[Object]->STATE_NOT_HELD)[CanBeTaggedValue_Int] s14(s3).i32 = FromVar s3[CanBeTaggedValue_Int] s15(s4).i32 = FromVar s4[CanBeTaggedValue_Int]
  5. GLOBOPT INSTR: s14(s3).i32 = FromVar s3[LikelyCanBeTaggedValue_Int].var ) s30[LikelyCanBeTaggedValue_Int].var = MOV

    s3[LikelyCanBeTaggedValue_Int].var s31.i64 = MOV s30[LikelyCanBeTaggedValue_Int].var # s31.i64 = SHR s31.i64, 48 (0x30).i8 # CMP s31.i64, 1 (0x1).i32 # JNE $L7 # s14(s3).i32 = MOV_TRUNC s30[LikelyCanBeTaggedValue_Int].i32 # JMP $L8 # $L7: [helper] # s32.i64 = LEA s20<-9>.u8 # s33.i64 = MOV s32.i64 # s34.var = MOV s3[LikelyCanBeTaggedValue_Int].var # arg3(s36)(r8).i64 = MOV s33.i64 # arg2(s37)(rdx).u64 = MOV 0xXXXXXXXX (ScriptContext).u64 # arg1(s38)(rcx).var = MOV s34.var # s39(rax).u64 = MOV Conv_ToInt32_NoObjects.u64 # s35(rax).i32 = CALL s39(rax).u64 # s14(s3).i32 = MOV s35(rax).i32 # s40.u8 = MOV s20<-9>.u8 # TEST s40.u8, s40.u8 # JEQ $L8 # $L9: [helper] # CALL SaveAllRegistersAndBailOut.u64 # Bailout: #0013 (BailOutOnNotPrimitive) JMP $L6 # $L8: # GLOBOPT INSTR: s14(s3).i32 = FromVar s3[CanBeTaggedValue_Int].var! s19[CanBeTaggedValue_Int].var = MOV s3[CanBeTaggedValue_Int].var s14(s3).i32 = MOV_TRUNC s19[CanBeTaggedValue_Int].i32 21 vs 2
  6. ▪ public addDeviceTask(id: Int, priority: Int, queue: Packet) { this.addTask(id,

    priority, queue, new DeviceTask(this)); } Scheduler.prototype.addDeviceTask = function (id/** @type {int} */, priority/** @type {int} */, queue/** @type {obj} */) { this.addTask(id/** @type {int} */, priority/** @type {int} */, queue, new DeviceTask(this)); }; ▪