Skip to content

Instantly share code, notes, and snippets.

@MasterDuke17

MasterDuke17/1 Secret

Last active March 8, 2019 04:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MasterDuke17/b69bf98b0681a80a00986a4473842af1 to your computer and use it in GitHub Desktop.
Save MasterDuke17/b69bf98b0681a80a00986a4473842af1 to your computer and use it in GitHub Desktop.
/usr/bin/perl tools/build/gen-cat.pl jvm src/core/NativeTypes.nqp src/core/NQPRoutine.nqp src/core/NQPMu.nqp src/core/NQPCapture.nqp src/core/IO.nqp src/core/Regex.nqp src/core/Hash.nqp src/core/NQPLock.nqp src/core/testing.nqp src/core/YOUAREHERE.nqp > gen/jvm/stage2/NQPCORE.setting
java -cp gen/jvm/stage1 -Xbootclasspath/a:gen/jvm/stage1:nqp-runtime.jar:3rdparty/asm/asm-4.1.jar:3rdparty/asm/asm-tree-4.1.jar:3rdparty/jline/jline-1.0.jar:3rdparty/jna/jna-4.0.0.jar:gen/jvm/stage1/nqp.jar nqp --bootstrap --module-path=gen/jvm/stage2 --setting=NULL --no-regex-lib --target=jar \
--output=gen/jvm/stage2/NQPCORE.setting.jar gen/jvm/stage2/NQPCORE.setting
This type cannot unbox to a native integer
in compose (gen/jvm/stage2/nqpmo.nqp:1522)
in pkg_compose (gen/jvm/stage1/NQP.nqp:601)
in package_def (gen/jvm/stage1/NQP.nqp:2860)
in !reduce (gen/jvm/stage1/QRegex.nqp:1659)
in !cursor_pass (gen/jvm/stage1/QRegex.nqp:1602)
in package_def (gen/jvm/stage1/NQP.nqp:1249)
in package_declarator:sym<native> (gen/jvm/stage1/NQP.nqp)
in !protoregex (gen/jvm/stage1/QRegex.nqp:1699)
in package_declarator (gen/jvm/stage1/NQP.nqp)
in scoped (gen/jvm/stage1/NQP.nqp:1280)
in scope_declarator:sym<my> (gen/jvm/stage1/NQP.nqp)
in !protoregex (gen/jvm/stage1/QRegex.nqp:1699)
in scope_declarator (gen/jvm/stage1/NQP.nqp)
in term:sym<scope_declarator> (gen/jvm/stage1/NQP.nqp)
in !protoregex (gen/jvm/stage1/QRegex.nqp:1699)
in term (gen/jvm/stage1/NQPHLL.nqp)
in termish (gen/jvm/stage1/NQPHLL.nqp)
in EXPR (gen/jvm/stage1/NQPHLL.nqp:522)
in statement (gen/jvm/stage1/NQP.nqp:963)
in statementlist (gen/jvm/stage1/NQP.nqp)
in comp_unit (gen/jvm/stage1/NQP.nqp:930)
in TOP (gen/jvm/stage1/NQP.nqp:828)
in parse (gen/jvm/stage1/QRegex.nqp:2306)
in parse (gen/jvm/stage1/NQPHLL.nqp:1546)
in execute_stage (gen/jvm/stage1/NQPHLL.nqp:1462)
in run (gen/jvm/stage1/NQPHLL.nqp:1495)
in <anon> (gen/jvm/stage1/NQPHLL.nqp:1498)
in compile (gen/jvm/stage1/NQPHLL.nqp:1484)
in eval (gen/jvm/stage1/NQPHLL.nqp:1178)
in evalfiles (gen/jvm/stage1/NQPHLL.nqp:1439)
in command_eval (gen/jvm/stage1/NQPHLL.nqp:1329)
in command_line (gen/jvm/stage1/NQPHLL.nqp:1288)
in MAIN (gen/jvm/stage1/NQP.nqp:4149)
in <mainline> (gen/jvm/stage1/NQP.nqp:4145)
in <anon> (gen/jvm/stage1/NQP.nqp)
make: *** [Makefile:676: gen/jvm/stage2/NQPCORE.setting.jar] Error 1
/usr/bin/perl tools/build/gen-cat.pl jvm src/core/NativeTypes.nqp src/core/NQPRoutine.nqp src/core/NQPMu.nqp src/core/NQPCapture.nqp src/core/IO.nqp src/core/Regex.nqp src/core/Hash.nqp src/core/NQPLock.nqp src/core/testing.nqp src/core/YOUAREHERE.nqp > gen/jvm/stage2/NQPCORE.setting
java -cp gen/jvm/stage1 -Xbootclasspath/a:gen/jvm/stage1:nqp-runtime.jar:3rdparty/asm/asm-4.1.jar:3rdparty/asm/asm-tree-4.1.jar:3rdparty/jline/jline-1.0.jar:3rdparty/jna/jna-4.0.0.jar:gen/jvm/stage1/nqp.jar nqp --bootstrap --module-path=gen/jvm/stage2 --setting=NULL --no-regex-lib --target=jar \
--output=gen/jvm/stage2/NQPCORE.setting.jar gen/jvm/stage2/NQPCORE.setting
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
9AB16ECD28778906CF8E5F7F3D7D2F552734836B.qb_76(Lorg/perl6/nqp/runtime/CompilationUnit;Lorg/perl6/nqp/runtime/ThreadContext;Lorg/perl6/nqp/runtime/CodeRef;Lorg/perl6/nqp/runtime/CallSiteDescriptor;Lorg/perl6/nqp/runtime/ResumeStatus$Frame;Lorg/perl6/nqp/sixmodel/SixModelObject;Lorg/perl6/nqp/sixmodel/SixModelObject;)V @163: d2l
Reason:
Type long (current frame, stack[0]) is not assignable to double
Current Frame:
bci: @163
flags: { }
locals: { 'org/perl6/nqp/runtime/CompilationUnit', 'org/perl6/nqp/runtime/ThreadContext', 'org/perl6/nqp/runtime/CodeRef', 'org/perl6/nqp/runtime/CallSiteDescriptor', 'org/perl6/nqp/runtime/ResumeStatus$Frame', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', long, long_2nd, long, long_2nd, long, long_2nd, long, long_2nd, 'java/lang/String', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/sixmodel/SixModelObject', 'org/perl6/nqp/runtime/CallFrame' }
stack: { long, long_2nd }
Bytecode:
0x0000000: 013a 0701 3a08 013a 0901 3a0a 013a 0b01
0x0000010: 3a0c 013a 0d01 3a0e 013a 0f01 3a10 013a
0x0000020: 1101 3a12 013a 1309 3714 0937 1609 3718
0x0000030: 0937 1a01 3a1c 013a 1d01 3a1e 013a 1f01
0x0000040: 3a20 013a 2101 3a22 013a 2301 3a24 1904
0x0000050: c705 0bbb 000e 592b 2cb7 0012 3a25 1905
0x0000060: 3a07 1906 3a08 1907 2bb8 0036 1293 1007
0x0000070: 2bba 009a 0000 1301 e114 00a7 2bb8 00b4
0x0000080: 2bb8 015a 2bb8 00b8 2bb8 00bc 593a 0957
0x0000090: 092b b800 b82b b800 bc59 3a0a 5719 0a2b
0x00000a0: b803 2f8f 1909 2bb8 032f 8fb8 03a0 5c37
0x00000b0: 1409 9499 03c1 1907 2bb8 0036 1293 1007
0x00000c0: 2bba 009a 0000 1301 e114 00a7 2bb8 00b4
0x00000d0: 190a 2bb8 032f 8f2b b801 623a 1d19 1d59
0x00000e0: c700 0557 0113 0120 2bb8 0139 3a1d 191d
0x00000f0: 59c7 0005 5701 593a 0b57 1907 2bb8 0036
0x0000100: 1293 1007 2bba 009a 0000 1301 e114 00a7
0x0000110: 2bb8 00b4 190a 2bb8 032f 8f2b b801 623a
0x0000120: 1d19 1d59 c700 0557 0113 0200 2bb8 0139
0x0000130: 3a1d 191d 59c7 0005 5701 593a 0c57 1907
0x0000140: 2bb8 0036 1293 1007 2bba 009a 0000 1301
0x0000150: dd14 00a3 2bb8 00b4 190b 2bb8 0135 2bb8
0x0000160: 0139 3a1d 191d 59c7 0005 5701 593a 0d57
0x0000170: 190d 2bb8 013c 0994 9900 af01 5719 0d13
0x0000180: 03ea 2bb8 0124 5c37 1609 9499 0024 190d
0x0000190: 3a1d 1303 ea03 2b19 1dba 0127 0000 a700
0x00001a0: 0703 a702 f519 25b8 011f 3a1e a700 0f16
0x00001b0: 162b b800 b82b b800 bc3a 1e19 1e2b b801
0x00001c0: 1009 9499 002c 0157 190d 190c 3a1d 3a1f
0x00001d0: 1303 ec05 2b19 1f19 1dba 011b 0000 a700
0x00001e0: 0704 a702 b519 25b8 011f 3a20 a700 3501
0x00001f0: 5713 03ee 190b 2bb8 0135 b801 7813 03f0
0x0000200: b801 783a 1c19 1c2b b801 7ea7 0007 05a7
0x0000210: 0288 1925 b801 822b b801 2e2b b801 323a
0x0000220: 2019 2057 a702 380a 2bb8 00b8 2bb8 00bc
0x0000230: 593a 0e57 092b b800 b82b b800 bc59 3a0f
0x0000240: 5719 0e2b b803 2f8f 1907 2bb8 0036 1293
0x0000250: 1007 2bba 009a 0000 1303 4814 00f8 2bb8
0x0000260: 00b4 2bb8 015a b803 a05c 3718 0994 9900
0x0000270: 0b19 0f2b b803 f337 1816 1809 9499 0194
0x0000280: 1907 2bb8 0036 1293 1007 2bba 009a 0000
0x0000290: 1303 4814 00f8 2bb8 00b4 190e 2bb8 032f
0x00002a0: 8f2b b801 623a 1d19 1d59 c700 0557 0159
0x00002b0: 3a10 5719 102b b801 1619 103a 1d3a 1f13
0x00002c0: 0251 052b 191f 191d ba01 1b00 00a7 0007
0x00002d0: 06a7 01c6 1925 b801 1f59 3a11 5719 1119
0x00002e0: 0b2b b801 352b b801 393a 1d19 1d59 c700
0x00002f0: 0557 0159 3a12 5719 122b b801 3c09 9499
0x0000300: 00fa 0157 1912 1303 ea2b b801 245c 371a
0x0000310: 0994 9900 2419 123a 1d13 03ea 032b 191d
0x0000320: ba01 2700 00a7 0007 07a7 016e 1925 b801
0x0000330: 1f3a 21a7 000f 161a 2bb8 00b8 2bb8 00bc
0x0000340: 3a21 1921 2bb8 0110 0994 9900 7919 123a
0x0000350: 1d13 03f5 032b 191d ba01 2700 00a7 0007
0x0000360: 08a7 0136 1925 b801 1f59 3a13 5719 1319
0x0000370: 0c3a 1d3a 1f13 03ec 052b 191f 191d ba01
0x0000380: 1b00 00a7 0008 1006 a701 0f19 072b b800
0x0000390: 3612 9310 072b ba00 9a00 0013 01dd 1400
0x00003a0: a32b b800 b419 0b2b b801 3519 132b b801
0x00003b0: 4457 0a2b b800 b82b b800 bc59 3a0f 3a22
0x00003c0: a700 3601 5713 03f7 190b 2bb8 0135 b801
0x00003d0: 7813 03f9 b801 783a 1c19 1c2b b801 7ea7
0x00003e0: 0008 1007 a700 b319 25b8 0182 2bb8 012e
0x00003f0: 2bb8 0132 3a22 1922 5719 0e2b b803 2f8f
0x0000400: 0a61 2bb8 00b8 2bb8 00bc 593a 0e57 a7fe
0x0000410: 3319 0f59 3a23 2bb8 0110 0994 9a00 3901
0x0000420: 5713 03f7 190b 2bb8 0135 b801 7813 03fb
0x0000430: b801 783a 1c19 1c2b b801 7ea7 0008 1008
0x0000440: a700 5719 25b8 0182 2bb8 012e 2bb8 0132
0x0000450: 3a24 a700 0719 233a 2419 2457 190a 2bb8
0x0000460: 032f 8f0a 612b b800 b82b b800 bc59 3a0a
0x0000470: 57a7 fc2c 1614 1925 b802 55a7 0016 59c1
0x0000480: 004f 9900 0919 25b6 0053 bf2b 5fb8 0059
0x0000490: bf19 25b6 0053 b101 101e bd00 5b59 032c
0x00004a0: 5359 042d 5359 0519 0553 5906 1906 5359
0x00004b0: 0719 0753 5908 1908 5359 1006 1909 5359
0x00004c0: 1007 190a 5359 1008 190b 5359 1009 190c
0x00004d0: 5359 100a 190d 5359 100b 190e 5359 100c
0x00004e0: 190f 5359 100d 1910 5359 100e 1911 5359
0x00004f0: 100f 1912 5359 1010 1913 5359 1011 1614
0x0000500: b801 9153 5910 1216 16b8 0191 5359 1013
0x0000510: 1618 b801 9153 5910 1416 1ab8 0191 5359
0x0000520: 1015 191c 5359 1016 191d 5359 1017 191e
0x0000530: 5359 1018 191f 5359 1019 1920 5359 101a
0x0000540: 1921 5359 101b 1922 5359 101c 1923 5359
0x0000550: 101d 1924 5319 25b6 005f bf19 04b4 0065
0x0000560: 4c19 04b4 0069 3a25 1904 b400 6c59 0332
0x0000570: c000 6e4d 5904 32c0 0070 4e59 0532 c000
0x0000580: 733a 0559 0632 c000 733a 0659 0732 c000
0x0000590: 733a 0759 0832 c000 733a 0859 1006 32c0
0x00005a0: 0073 3a09 5910 0732 c000 733a 0a59 1008
0x00005b0: 32c0 0073 3a0b 5910 0932 c000 733a 0c59
0x00005c0: 100a 32c0 0073 3a0d 5910 0b32 c000 733a
0x00005d0: 0e59 100c 32c0 0073 3a0f 5910 0d32 c000
0x00005e0: 733a 1059 100e 32c0 0073 3a11 5910 0f32
0x00005f0: c000 733a 1259 1010 32c0 0073 3a13 5910
0x0000600: 1132 c001 8db6 0195 3714 5910 1232 c001
0x0000610: 8db6 0195 3716 5910 1332 c001 8db6 0195
0x0000620: 3718 5910 1432 c001 8db6 0195 371a 5910
0x0000630: 1532 c001 973a 1c59 1016 32c0 0073 3a1d
0x0000640: 5910 1732 c000 733a 1e59 1018 32c0 0073
0x0000650: 3a1f 5910 1932 c000 733a 2059 101a 32c0
0x0000660: 0073 3a21 5910 1b32 c000 733a 2259 101c
0x0000670: 32c0 0073 3a23 101d 32c0 0073 3a24 1904
0x0000680: b600 7619 04b4 0079 aa00 0000 ffff fb16
0x0000690: 0000 0000 0000 0008 ffff fb16 ffff fb56
0x00006a0: ffff fb83 ffff fc45 ffff fc9d ffff fcd5
0x00006b0: ffff fcfb ffff fd57 ffff fdb3
Exception Handler Table:
bci [409, 417] => handler: 417
bci [473, 481] => handler: 481
bci [520, 526] => handler: 526
bci [712, 720] => handler: 720
bci [800, 808] => handler: 808
bci [856, 864] => handler: 864
bci [894, 902] => handler: 902
bci [988, 994] => handler: 994
bci [1080, 1086] => handler: 1086
bci [94, 1150] => handler: 1150
Stackmap Table:
full_frame(@157,{Object[#4],Object[#26],Object[#110],Object[#112],Object[#97],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Long,Long,Long,Long,Object[#407],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#14]},{})
same_locals_1_stack_item_extended(@229,Object[#115])
same_locals_1_stack_item_frame(@246,Object[#115])
same_locals_1_stack_item_frame(@297,Object[#115])
same_locals_1_stack_item_frame(@314,Object[#115])
same_locals_1_stack_item_frame(@364,Object[#115])
same_frame(@414)
same_locals_1_stack_item_frame(@417,Object[#71])
same_frame(@421)
same_frame(@431)
same_frame(@443)
same_frame(@478)
same_locals_1_stack_item_frame(@481,Object[#71])
same_frame(@485)
same_frame(@495)
same_frame(@523)
same_locals_1_stack_item_frame(@526,Object[#71])
same_frame(@530)
same_frame(@545)
same_frame(@551)
same_frame(@577)
same_frame(@633)
same_locals_1_stack_item_frame(@687,Object[#115])
same_frame(@717)
same_locals_1_stack_item_frame(@720,Object[#71])
same_frame(@724)
same_locals_1_stack_item_frame(@755,Object[#115])
same_frame(@805)
same_locals_1_stack_item_frame(@808,Object[#71])
same_frame(@812)
same_frame(@822)
same_frame(@834)
same_frame(@861)
same_locals_1_stack_item_frame(@864,Object[#71])
same_frame(@868)
same_frame(@899)
same_locals_1_stack_item_frame(@902,Object[#71])
same_frame(@907)
same_frame(@963)
same_frame(@991)
same_locals_1_stack_item_frame(@994,Object[#71])
same_frame(@999)
same_frame(@1014)
same_frame(@1017)
same_frame(@1041)
same_frame(@1083)
same_locals_1_stack_item_frame(@1086,Object[#71])
same_frame(@1091)
same_frame(@1109)
same_frame(@1113)
same_frame(@1116)
same_frame(@1140)
same_locals_1_stack_item_frame(@1150,Object[#77])
same_locals_1_stack_item_frame(@1163,Object[#77])
same_frame(@1169)
full_frame(@1175,{Object[#4],Object[#26],Object[#110],Object[#112],Object[#97],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Long,Long,Long,Long,Object[#407],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#115],Object[#14]},{Object[#71],Integer})
full_frame(@1371,{Object[#4],Object[#26],Object[#110],Object[#112],Object[#97],Object[#115],Object[#115],Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Long,Long,Long,Long,Null,Null,Null,Null,Null,Null,Null,Null,Null},{})
in <anon> (src/vm/jvm/ModuleLoader.nqp:76)
in load_module (src/vm/jvm/ModuleLoader.nqp:58)
in load_module (gen/jvm/stage1/NQP.nqp:299)
in statement_control:sym<use> (gen/jvm/stage1/NQP.nqp:2436)
in !reduce (gen/jvm/stage1/QRegex.nqp:1659)
in !cursor_pass (gen/jvm/stage1/QRegex.nqp:1602)
in statement_control:sym<use> (gen/jvm/stage1/NQP.nqp)
in !protoregex (gen/jvm/stage1/QRegex.nqp:1699)
in statement_control (gen/jvm/stage1/NQP.nqp)
in statement (gen/jvm/stage1/NQP.nqp:967)
in statementlist (gen/jvm/stage1/NQP.nqp)
in comp_unit (gen/jvm/stage1/NQP.nqp:934)
in TOP (gen/jvm/stage1/NQP.nqp:832)
in parse (gen/jvm/stage1/QRegex.nqp:2306)
in parse (gen/jvm/stage1/NQPHLL.nqp:1546)
in execute_stage (gen/jvm/stage1/NQPHLL.nqp:1462)
in run (gen/jvm/stage1/NQPHLL.nqp:1495)
in <anon> (gen/jvm/stage1/NQPHLL.nqp:1498)
in compile (gen/jvm/stage1/NQPHLL.nqp:1484)
in eval (gen/jvm/stage1/NQPHLL.nqp:1178)
in evalfiles (gen/jvm/stage1/NQPHLL.nqp:1439)
in command_eval (gen/jvm/stage1/NQPHLL.nqp:1329)
in command_line (gen/jvm/stage1/NQPHLL.nqp:1288)
in MAIN (gen/jvm/stage1/NQP.nqp:4153)
in <mainline> (gen/jvm/stage1/NQP.nqp:4149)
in <anon> (gen/jvm/stage1/NQP.nqp)
make: *** [Makefile:676: gen/jvm/stage2/NQPCORE.setting.jar] Error 1
diff --git a/src/vm/jvm/NQP/Ops.nqp b/src/vm/jvm/NQP/Ops.nqp
index 225dcedac..6b6c47c5b 100644
--- a/src/vm/jvm/NQP/Ops.nqp
+++ b/src/vm/jvm/NQP/Ops.nqp
@@ -93,6 +93,10 @@ $ops.add_hll_op('nqp', 'postdec', -> $qastcomp, $op {
$tmp));
});
+$ops.add_hll_op('nqp', 'intify', -> $qastcomp, $op {
+ $qastcomp.as_jast($op[0], :want($RT_INT))
+});
+
$ops.add_hll_op('nqp', 'numify', -> $qastcomp, $op {
$qastcomp.as_jast($op[0], :want($RT_NUM))
});
@@ -146,7 +150,7 @@ QAST::OperationsJAST.add_hll_unbox('nqp', $RT_INT, -> $qastcomp {
my $il := JAST::InstructionList.new();
$il.append(JAST::Instruction.new( :op('aload_1') ));
$il.append(JAST::Instruction.new( :op('invokestatic'), $TYPE_OPS,
- 'smart_numify', 'Double', $TYPE_SMO, $TYPE_TC ));
+ 'smart_intify', 'Long', $TYPE_SMO, $TYPE_TC ));
$il.append(JAST::Instruction.new( :op('d2l') ));
$il
});
diff --git a/src/vm/jvm/QAST/Compiler.nqp b/src/vm/jvm/QAST/Compiler.nqp
index 56a6a732c..4ce5f4c83 100644
--- a/src/vm/jvm/QAST/Compiler.nqp
+++ b/src/vm/jvm/QAST/Compiler.nqp
@@ -688,6 +688,9 @@ QAST::OperationsJAST.add_core_op('list_s', -> $qastcomp, $op {
$arr
}
});
+QAST::OperationsJAST.add_core_op('intify', -> $qastcomp, $op {
+ $qastcomp.as_jast($op[0], :want($RT_INT))
+});
QAST::OperationsJAST.add_core_op('numify', -> $qastcomp, $op {
$qastcomp.as_jast($op[0], :want($RT_NUM))
});
diff --git a/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java b/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java
index a58dac11e..3c239fe03 100644
--- a/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java
+++ b/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java
@@ -3928,6 +3928,40 @@ public final class Ops {
// If anything else, we can't do it.
throw ExceptionHandling.dieInternal(tc, "Cannot numify this");
}
+ public static long smart_intify(SixModelObject obj, ThreadContext tc) {
+ obj = decont(obj, tc);
+
+ // If it's null, it's 0
+ if (obj == null)
+ return 0;
+
+ // If it can unbox as an int or a num, that wins right off.
+ StorageSpec ss = obj.st.REPR.get_storage_spec(tc, obj.st);
+ if ((ss.can_box & StorageSpec.CAN_BOX_INT) != 0)
+ return obj.get_int(tc);
+ if ((ss.can_box & StorageSpec.CAN_BOX_NUM) != 0)
+ return (long)obj.get_num(tc);
+
+ // Otherwise, look for an Int method.
+ SixModelObject intMeth = obj.st.MethodCache.get("Int");
+ if (intMeth != null) {
+ invokeDirect(tc, intMeth, invocantCallSite, new Object[] { obj });
+ return result_i(tc.curFrame);
+ }
+
+ // If it's a type object, zero.
+ if (obj instanceof TypeObject)
+ return 0;
+
+ // See if it can unbox to a primitive we can numify.
+ if ((ss.can_box & StorageSpec.CAN_BOX_STR) != 0)
+ return coerce_s2i(obj.get_str(tc));
+ if (obj instanceof VMArrayInstance || obj instanceof VMHashInstance)
+ return obj.elems(tc);
+
+ // If anything else, we can't do it.
+ throw ExceptionHandling.dieInternal(tc, "Cannot intify this");
+ }
/* Math operations. */
public static double sec_n(double val) {
@@ -6454,8 +6488,8 @@ public final class Ops {
int curEdge = 0;
nfa.states[i] = new NFAStateInfo[edges];
for (int j = 0; j < elems; j += 3) {
- int act = (int)smart_numify(edgeInfo.at_pos_boxed(tc, j), tc);
- int to = (int)smart_numify(edgeInfo.at_pos_boxed(tc, j + 2), tc);
+ int act = (int)smart_intify(edgeInfo.at_pos_boxed(tc, j), tc);
+ int to = (int)smart_intify(edgeInfo.at_pos_boxed(tc, j + 2), tc);
nfa.states[i][curEdge] = new NFAStateInfo();
nfa.states[i][curEdge].act = act;
@@ -6468,7 +6502,7 @@ public final class Ops {
case NFA.EDGE_CODEPOINT_NEG:
case NFA.EDGE_CHARCLASS:
case NFA.EDGE_CHARCLASS_NEG:
- nfa.states[i][curEdge].arg_i = (int)smart_numify(edgeInfo.at_pos_boxed(tc, j + 1), tc);
+ nfa.states[i][curEdge].arg_i = (int)smart_intify(edgeInfo.at_pos_boxed(tc, j + 1), tc);
break;
case NFA.EDGE_CHARLIST:
case NFA.EDGE_CHARLIST_NEG:
@@ -6480,8 +6514,8 @@ public final class Ops {
case NFA.EDGE_CHARRANGE:
case NFA.EDGE_CHARRANGE_NEG: {
SixModelObject arg = edgeInfo.at_pos_boxed(tc, j + 1);
- nfa.states[i][curEdge].arg_lc = (char)smart_numify(arg.at_pos_boxed(tc, 0), tc);
- nfa.states[i][curEdge].arg_uc = (char)smart_numify(arg.at_pos_boxed(tc, 1), tc);
+ nfa.states[i][curEdge].arg_lc = (char)smart_intify(arg.at_pos_boxed(tc, 0), tc);
+ nfa.states[i][curEdge].arg_uc = (char)smart_intify(arg.at_pos_boxed(tc, 1), tc);
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment