@@ -3,8 +3,8 @@ package top.mcfpp.antlr
33import top.mcfpp.Project
44import top.mcfpp.Project.withCompilationContext
55import top.mcfpp.annotations.InsertCommand
6- import top.mcfpp.annotations.MNIOperator
76import top.mcfpp.annotations.MNIFunction
7+ import top.mcfpp.annotations.MNIOperator
88import top.mcfpp.antlr.mcfppParser.ClassDeclarationContext
99import top.mcfpp.antlr.mcfppParser.TemplateDeclarationContext
1010import top.mcfpp.compiletime.CompileTimeFunction
@@ -586,7 +586,7 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
586586 val op = ctx.supportOperator().text
587587 // 创建函数对象
588588 val f = Function (
589- ctx.supportOperator().text ,
589+ op ,
590590 Class .currClass!! ,
591591 ctx.functionBody()
592592 )
@@ -600,15 +600,22 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
600600 // 解析参数
601601 f.addParamsFromContext(ctx.functionParams())
602602 // 参数数量检查
603- if (f.normalParams.size != 1 ){
603+ if (Var .unaryOp.contains(op) && f.normalParams.size != 0 ){
604+ LogProcessor .error(" Unary operator $op must have no parameter: ${ctx.text} " )
605+ return null
606+ }else if (Var .binaryOp.contains(op) && f.normalParams.size!= 1 ){
607+ LogProcessor .error(" Binary operator $op must have only one parameter: ${ctx.text} " )
608+ return null
609+ }else if (f.normalParams.size != 1 ){
604610 LogProcessor .error(" Operator $op must have only one parameter: ${ctx.text} " )
605611 return null
606612 }
613+ val type = f.normalParams.firstOrNull()?.type
607614 // 注册函数
608- if (Class .currClass!! .field.hasOperator(op, f.normalParams[ 0 ]. type)) {
609- LogProcessor .error(" Already defined operator: $op (${f.normalParams[ 0 ]. type} ) in class " + Class .currClass!! .identifier)
615+ if (Class .currClass!! .field.hasOperator(op, type)) {
616+ LogProcessor .error(" Already defined operator: $op ($type ) in class " + Class .currClass!! .identifier)
610617 } else {
611- Class .currClass!! .field.addOperator(op, f.normalParams[ 0 ]. type, f)
618+ Class .currClass!! .field.addOperator(op, type, f)
612619 }
613620 f.ast = null
614621 return f
@@ -618,7 +625,7 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
618625 val op = ctx.supportOperator().text
619626 // 创建函数对象
620627 val f = Function (
621- ctx.supportOperator().text ,
628+ op ,
622629 DataTemplate .currTemplate!! ,
623630 ctx.functionBody()
624631 )
@@ -632,15 +639,22 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
632639 // 解析参数
633640 f.addParamsFromContext(ctx.functionParams())
634641 // 参数数量检查
635- if (f.normalParams.size != 1 ){
642+ if (Var .unaryOp.contains(op) && f.normalParams.size != 0 ){
643+ LogProcessor .error(" Unary operator $op must have no parameter: ${ctx.text} " )
644+ return null
645+ }else if (Var .binaryOp.contains(op) && f.normalParams.size!= 1 ){
646+ LogProcessor .error(" Binary operator $op must have only one parameter: ${ctx.text} " )
647+ return null
648+ }else if (f.normalParams.size != 1 ){
636649 LogProcessor .error(" Operator $op must have only one parameter: ${ctx.text} " )
637650 return null
638651 }
652+ val type = f.normalParams.firstOrNull()?.type
639653 // 注册函数
640- if (DataTemplate .currTemplate!! .field.hasOperator(op, f.normalParams[ 0 ]. type)) {
641- LogProcessor .error(" Already defined operator: $op (${f.normalParams[ 0 ]. type} ) in class " + DataTemplate .currTemplate!! .identifier)
654+ if (DataTemplate .currTemplate!! .field.hasOperator(op, type)) {
655+ LogProcessor .error(" Already defined operator: $op ($type ) in class " + DataTemplate .currTemplate!! .identifier)
642656 } else {
643- DataTemplate .currTemplate!! .field.addOperator(op, f.normalParams[ 0 ]. type, f)
657+ DataTemplate .currTemplate!! .field.addOperator(op, type, f)
644658 }
645659 f.ast = null
646660 return f
@@ -664,10 +678,17 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
664678 }
665679 nf.addParamsFromContext(ctx.functionParams())
666680 // 参数数量检查
667- if (nf.normalParams.size != 1 ){
681+ if (Var .unaryOp.contains(op) && nf.normalParams.size != 0 ){
682+ LogProcessor .error(" Unary operator $op must have no parameter: ${ctx.text} " )
683+ return null
684+ }else if (Var .binaryOp.contains(op) && nf.normalParams.size!= 1 ){
685+ LogProcessor .error(" Binary operator $op must have only one parameter: ${ctx.text} " )
686+ return null
687+ }else if (nf.normalParams.size != 1 ){
668688 LogProcessor .error(" Operator $op must have only one parameter: ${ctx.text} " )
669689 return null
670690 }
691+ val type = nf.normalParams.firstOrNull()?.type
671692 try {
672693 // 根据JavaRefer找到类
673694 val refer = ctx.javaRefer().text
@@ -678,24 +699,24 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
678699 for (method in methods){
679700 val mniRegister = method.getAnnotation(MNIOperator ::class .java) ? : continue
680701 // 比对
681- if (nf.normalParams[ 0 ]. type.typeName == mniRegister.paramType){
702+ if (( type? .typeName ? : " " ) == mniRegister.paramType){
682703 hasFind = true
683704 nf.javaMethod = method
684705 break
685706 }
686707 }
687708 if (! hasFind){
688- throw NoSuchMethodException (" Cannot find operator $op (${nf.normalParams[ 0 ]. type} ) in jvm class $clsName " )
709+ throw NoSuchMethodException (" Cannot find operator $op ($type ) in jvm class $clsName " )
689710 }
690711 } catch (e: ClassNotFoundException ) {
691712 LogProcessor .error(" Cannot find java class: " + e.message)
692713 return null
693714 }
694715 // 注册函数
695- if (Class .currClass!! .field.hasOperator(op, nf.normalParams[ 0 ]. type)) {
716+ if (Class .currClass!! .field.hasOperator(op, type)) {
696717 LogProcessor .error(" Already defined operator: $op (${nf.normalParams[0 ].type} ) in template " + Class .currClass!! .identifier)
697718 } else {
698- Class .currClass!! .field.addOperator(op, nf.normalParams[ 0 ]. type, nf)
719+ Class .currClass!! .field.addOperator(op, type, nf)
699720 }
700721 return nf
701722 }
@@ -710,10 +731,17 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
710731 }
711732 nf.addParamsFromContext(ctx.functionParams())
712733 // 参数数量检查
713- if (nf.normalParams.size != 1 ){
734+ if (Var .unaryOp.contains(op) && nf.normalParams.size != 0 ){
735+ LogProcessor .error(" Unary operator $op must have no parameter: ${ctx.text} " )
736+ return null
737+ }else if (Var .binaryOp.contains(op) && nf.normalParams.size!= 1 ){
738+ LogProcessor .error(" Binary operator $op must have only one parameter: ${ctx.text} " )
739+ return null
740+ }else if (nf.normalParams.size != 1 ){
714741 LogProcessor .error(" Operator $op must have only one parameter: ${ctx.text} " )
715742 return null
716743 }
744+ val type = nf.normalParams.firstOrNull()?.type
717745 try {
718746 // 根据JavaRefer找到类
719747 val refer = ctx.javaRefer().text
@@ -724,24 +752,24 @@ open class MCFPPFieldVisitor : mcfppParserBaseVisitor<Any?>() {
724752 for (method in methods){
725753 val mniRegister = method.getAnnotation(MNIOperator ::class .java) ? : continue
726754 // 比对
727- if (nf.normalParams[ 0 ]. type.typeName == mniRegister.paramType){
755+ if (( type? .typeName ? : " " ) == mniRegister.paramType){
728756 hasFind = true
729757 nf.javaMethod = method
730758 break
731759 }
732760 }
733761 if (! hasFind){
734- throw NoSuchMethodException (" Cannot find operator $op (${nf.normalParams[ 0 ]. type} ) in jvm class $clsName " )
762+ throw NoSuchMethodException (" Cannot find operator $op ($type ) in jvm class $clsName " )
735763 }
736764 } catch (e: ClassNotFoundException ) {
737765 LogProcessor .error(" Cannot find java class: " + e.message)
738766 return null
739767 }
740768 // 注册函数
741- if (DataTemplate .currTemplate!! .field.hasOperator(op, nf.normalParams[ 0 ]. type)) {
742- LogProcessor .error(" Already defined operator: $op (${nf.normalParams[ 0 ]. type} ) in template " + DataTemplate .currTemplate!! .identifier)
769+ if (DataTemplate .currTemplate!! .field.hasOperator(op, type)) {
770+ LogProcessor .error(" Already defined operator: $op ($type ) in template " + DataTemplate .currTemplate!! .identifier)
743771 } else {
744- DataTemplate .currTemplate!! .field.addOperator(op, nf.normalParams[ 0 ]. type, nf)
772+ DataTemplate .currTemplate!! .field.addOperator(op, type, nf)
745773 }
746774 return nf
747775 }
0 commit comments