-
-
Save MasterDuke17/82c5adac973524490488bad4538f4af7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git src/6model/reprs/MVMContext.c src/6model/reprs/MVMContext.c | |
index 3997f4c42..a621e2824 100644 | |
--- src/6model/reprs/MVMContext.c | |
+++ src/6model/reprs/MVMContext.c | |
@@ -332,6 +332,10 @@ static MVMint32 traversal_exists(MVMThreadContext *tc, MVMFrame *base, MVMuint8 | |
/* Try to get a context with the specified traversal applied. Ensures that the | |
* traversal would lead to a result, and returns a NULL context if not. */ | |
MVMObject * MVM_context_apply_traversal(MVMThreadContext *tc, MVMContext *ctx, MVMuint8 traversal) { | |
+ if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext) | |
+ MVM_exception_throw_adhoc(tc, "ctx* ops needs an MVMContext, got %s (%s)", | |
+ REPR(ctx)->name, MVM_6model_get_debug_name(tc, (MVMObject *)ctx)); | |
+ | |
/* Ensure we've got a traversable context. */ | |
if (!ctx->body.traversable) | |
MVM_exception_throw_adhoc(tc, | |
diff --git src/core/interp.c src/core/interp.c | |
index 313ef350b..dffa81f6a 100644 | |
--- src/core/interp.c | |
+++ src/core/interp.c | |
@@ -3053,8 +3053,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
goto NEXT; | |
OP(ctxouter): { | |
MVMObject *ctx = GET_REG(cur_op, 2).o; | |
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext) | |
- MVM_exception_throw_adhoc(tc, "ctxouter needs an MVMContext"); | |
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx, | |
MVM_CTX_TRAV_OUTER); | |
cur_op += 4; | |
@@ -3062,8 +3060,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
} | |
OP(ctxcaller): { | |
MVMObject *ctx = GET_REG(cur_op, 2).o; | |
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext) | |
- MVM_exception_throw_adhoc(tc, "ctxcaller needs an MVMContext"); | |
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx, | |
MVM_CTX_TRAV_CALLER); | |
cur_op += 4; | |
@@ -3889,9 +3885,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
MVM_exception_throw_adhoc(tc, "The multi-dispatch cache is superceded by the general dispatch mechanism"); | |
OP(ctxouterskipthunks): { | |
MVMObject *ctx = GET_REG(cur_op, 2).o; | |
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext) | |
- MVM_exception_throw_adhoc(tc, "ctxouter needs an MVMContext, got %s (%s)", | |
- REPR(ctx)->name, MVM_6model_get_debug_name(tc, ctx)); | |
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx, | |
MVM_CTX_TRAV_OUTER_SKIP_THUNKS); | |
cur_op += 4; | |
@@ -3899,9 +3892,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
} | |
OP(ctxcallerskipthunks): { | |
MVMObject *ctx = GET_REG(cur_op, 2).o; | |
- if (!IS_CONCRETE(ctx) || REPR(ctx)->ID != MVM_REPR_ID_MVMContext) | |
- MVM_exception_throw_adhoc(tc, "ctxcallerskipthunks needs an MVMContext, got %s (%s)", | |
- REPR(ctx)->name, MVM_6model_get_debug_name(tc, ctx)); | |
GET_REG(cur_op, 0).o = MVM_context_apply_traversal(tc, (MVMContext *)ctx, | |
MVM_CTX_TRAV_CALLER_SKIP_THUNKS); | |
cur_op += 4; | |
diff --git src/jit/graph.c src/jit/graph.c | |
index 8f4254897..44808e77d 100644 | |
--- src/jit/graph.c | |
+++ src/jit/graph.c | |
@@ -441,6 +441,11 @@ static void * op_to_func(MVMThreadContext *tc, MVMint16 opcode) { | |
case MVM_OP_scsetobj: return MVM_sc_set_object_op; | |
case MVM_OP_scsetcode: return MVM_sc_set_code_op; | |
+ case MVM_OP_ctxouter: | |
+ case MVM_OP_ctxcaller: | |
+ case MVM_OP_ctxouterskipthunks: | |
+ case MVM_OP_ctxcallerskipthunks: return MVM_context_apply_traversal; | |
+ | |
default: | |
MVM_oops(tc, "JIT: No function for op %d in op_to_func (%s)", opcode, MVM_op_get_op(opcode)->name); | |
} | |
@@ -1783,7 +1788,6 @@ start: | |
case MVM_OP_sp_getspeshslot: | |
case MVM_OP_ctx: | |
case MVM_OP_ctxlexpad: | |
- case MVM_OP_ctxcallerskipthunks: | |
case MVM_OP_curcode: | |
case MVM_OP_getcode: | |
case MVM_OP_sp_fastcreate: | |
@@ -4011,6 +4015,24 @@ start: | |
jg_append_call_c(tc, jg, op_to_func(tc, op), 4, args, MVM_JIT_RV_VOID, -1); | |
break; | |
} | |
+ case MVM_OP_ctxouter: | |
+ case MVM_OP_ctxcaller: | |
+ case MVM_OP_ctxouterskipthunks: | |
+ case MVM_OP_ctxcallerskipthunks: { | |
+ MVMint16 dst = ins->operands[0].reg.orig; | |
+ MVMint16 ctx = ins->operands[1].reg.orig; | |
+ MVMJitCallArg args[] = { { MVM_JIT_INTERP_VAR, { MVM_JIT_INTERP_TC } }, | |
+ { MVM_JIT_REG_VAL, { ctx } }, | |
+ { MVM_JIT_LITERAL, { op == MVM_OP_ctxouter | |
+ ? MVM_CTX_TRAV_OUTER | |
+ : op == MVM_OP_ctxcaller | |
+ ? MVM_CTX_TRAV_CALLER | |
+ : op == MVM_OP_ctxouterskipthunks | |
+ ? MVM_CTX_TRAV_OUTER_SKIP_THUNKS | |
+ : MVM_CTX_TRAV_CALLER_SKIP_THUNKS } } }; | |
+ jg_append_call_c(tc, jg, op_to_func(tc, op), 3, args, MVM_JIT_RV_PTR, dst); | |
+ break; | |
+ } | |
default: { | |
/* Check if it's an extop. */ | |
MVMint32 emitted_extop = 0; | |
diff --git src/jit/x64/emit.dasc src/jit/x64/emit.dasc | |
index e5760b4a4..54f120639 100644 | |
--- src/jit/x64/emit.dasc | |
+++ src/jit/x64/emit.dasc | |
@@ -1001,29 +1001,6 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
| mov WORK[dst], TMP1; | |
break; | |
} | |
- case MVM_OP_ctxcallerskipthunks: { | |
- MVMint16 dst = ins->operands[0].reg.orig; | |
- MVMint16 ctx = ins->operands[1].reg.orig; | |
- /* ctx = NULL */ | |
- | xor RV, RV; | |
- | mov TMP5, aword WORK[ctx]; | |
- /* check concrete instance of type or throw */ | |
- | test_type_object TMP5; | |
- | jnz >1; | |
- | cmp_repr_id TMP5, TMP6, MVM_REPR_ID_MVMContext; | |
- | jne >1; | |
- /* Call function to create context. */ | |
- | mov ARG1, TC | |
- | mov ARG2, TMP5 | |
- | mov ARG3, MVM_CTX_TRAV_CALLER_SKIP_THUNKS | |
- | callp &MVM_context_apply_traversal; | |
- | mov WORK[dst], RV; | |
- | jmp >2; | |
- |1: | |
- | throw_adhoc "ctxcallerskipthunks needs an MVMContext"; | |
- |2: | |
- break; | |
- } | |
case MVM_OP_curcode: { | |
MVMint16 dst = ins->operands[0].reg.orig; | |
| mov TMP1, TC->cur_frame; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+++ Preparing installation | |
Frame has no lexical with name '$?CLASS' | |
at gen/moar/stage2/NQPHLL.nqp:1528 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:SET_BLOCK_OUTER_CTX) | |
from gen/moar/Actions.nqp:1497 (/home/dan/Source/perl6/rakudo/blib/Perl6/Actions.moarvm:lang-version) | |
from gen/moar/Grammar.nqp:872 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:lang-version) | |
from gen/moar/Grammar.nqp:832 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:comp_unit) | |
from gen/moar/Grammar.nqp:553 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:TOP) | |
from gen/moar/stage2/QRegex.nqp:2267 (/home/dan/Source/perl6/install/share/nqp/lib/QRegex.moarvm:parse) | |
from gen/moar/stage2/NQPHLL.nqp:2295 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:parse) | |
from gen/moar/stage2/NQPHLL.nqp:2211 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:execute_stage) | |
from gen/moar/stage2/NQPHLL.nqp:2246 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:run) | |
from gen/moar/stage2/NQPHLL.nqp:2242 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:) | |
from gen/moar/stage2/NQPHLL.nqp:2238 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:compile) | |
from SETTING::src/core.c/ForeignCode.pm6:66 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:EVAL) | |
from SETTING::src/core.c/CompUnit/PrecompilationUnit.pm6:122 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/PrecompilationUnit.pm6:110 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:spec) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:168 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:165 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/Lock.pm6:30 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:protect) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:163 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:162 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:158 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:load-dependencies) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:271 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:270 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:load) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:59 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:try-load) | |
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:578 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:566 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:need) | |
from gen/moar/World.nqp:1475 (/home/dan/Source/perl6/rakudo/blib/Perl6/World.moarvm:load_module) | |
from gen/moar/World.nqp:1425 (/home/dan/Source/perl6/rakudo/blib/Perl6/World.moarvm:do_pragma_or_load_module) | |
from gen/moar/Grammar.nqp:1314 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statement_control:sym<use>) | |
from gen/moar/stage2/QRegex.nqp:1704 (/home/dan/Source/perl6/install/share/nqp/lib/QRegex.moarvm:!protoregex) | |
from <unknown>:1 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statement_control) | |
from gen/moar/Grammar.nqp:962 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statement) | |
from gen/moar/Grammar.nqp:890 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:statementlist) | |
from gen/moar/stage2/NQPHLL.nqp:1465 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:LANG) | |
from gen/moar/Grammar.nqp:1342 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:FOREIGN_LANG) | |
from gen/moar/Grammar.nqp:838 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:comp_unit) | |
from gen/moar/Grammar.nqp:553 (/home/dan/Source/perl6/rakudo/blib/Perl6/Grammar.moarvm:TOP) | |
from gen/moar/stage2/QRegex.nqp:2267 (/home/dan/Source/perl6/install/share/nqp/lib/QRegex.moarvm:parse) | |
from gen/moar/stage2/NQPHLL.nqp:2295 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:parse) | |
from gen/moar/stage2/NQPHLL.nqp:2211 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:execute_stage) | |
from gen/moar/stage2/NQPHLL.nqp:2246 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:run) | |
from gen/moar/stage2/NQPHLL.nqp:2242 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:) | |
from gen/moar/stage2/NQPHLL.nqp:2238 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:compile) | |
from gen/moar/stage2/NQPHLL.nqp:1913 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:eval) | |
from gen/moar/stage2/NQPHLL.nqp:2148 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:evalfiles) | |
from gen/moar/stage2/NQPHLL.nqp:2108 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_eval) | |
from gen/moar/Compiler.nqp:111 (/home/dan/Source/perl6/rakudo/blib/Perl6/Compiler.moarvm:command_eval) | |
from gen/moar/stage2/NQPHLL.nqp:2033 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_line) | |
from gen/moar/rakudo.nqp:127 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:MAIN) | |
from gen/moar/rakudo.nqp:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<mainline>) | |
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<main>) | |
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<entry>) | |
at SETTING::src/core.c/Exception.pm6:62 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:throw) | |
from SETTING::src/core.c/control.pm6:255 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:die) | |
from SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:456 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:precompile) | |
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:301 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:291 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:274 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:) | |
from SETTING::src/core.c/Lock.pm6:30 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:protect) | |
from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:177 (/home/dan/Source/perl6/rakudo/blib/CORE.c.setting.moarvm:install) | |
from /home/dan/Source/perl6/rakudo/tools/build/install-core-dist.raku:46 (<ephemeral file>:<unit>) | |
from /home/dan/Source/perl6/rakudo/tools/build/install-core-dist.raku:1 (<ephemeral file>:<unit-outer>) | |
from gen/moar/stage2/NQPHLL.nqp:1943 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:eval) | |
from gen/moar/stage2/NQPHLL.nqp:2148 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:evalfiles) | |
from gen/moar/stage2/NQPHLL.nqp:2108 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_eval) | |
from gen/moar/Compiler.nqp:111 (/home/dan/Source/perl6/rakudo/blib/Perl6/Compiler.moarvm:command_eval) | |
from gen/moar/stage2/NQPHLL.nqp:2033 (/home/dan/Source/perl6/install/share/nqp/lib/NQPHLL.moarvm:command_line) | |
from gen/moar/rakudo.nqp:127 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:MAIN) | |
from gen/moar/rakudo.nqp:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<mainline>) | |
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<main>) | |
from <unknown>:1 (/home/dan/Source/perl6/rakudo/rakudo.moarvm:<entry>) | |
make: *** [Makefile:1265: m-install-post] Error 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment