예제 #1
0
 public void rawDefineTemplate(String name, CompiledST code, Token defT) {
   CompiledST prev = rawGetTemplate(name);
   if (prev != null) {
     if (!prev.isRegion) {
       errMgr.compileTimeError(ErrorType.TEMPLATE_REDEFINITION, null, defT);
       return;
     }
     if (prev.isRegion) {
       if (code.regionDefType != ST.RegionType.IMPLICIT
           && prev.regionDefType == ST.RegionType.EMBEDDED) {
         errMgr.compileTimeError(
             ErrorType.EMBEDDED_REGION_REDEFINITION, null, defT, getUnMangledTemplateName(name));
         return;
       } else if (code.regionDefType == ST.RegionType.IMPLICIT
           || prev.regionDefType == ST.RegionType.EXPLICIT) {
         errMgr.compileTimeError(
             ErrorType.REGION_REDEFINITION, null, defT, getUnMangledTemplateName(name));
         return;
       }
     }
   }
   code.nativeGroup = this;
   code.templateDefStartToken = defT;
   templates.put(name, code);
 }
예제 #2
0
  public CompiledST defineRegion(
      String enclosingTemplateName, Token regionT, String template, Token templateToken) {
    String name = regionT.getText();
    template = Misc.trimOneStartingNewline(template);
    template = Misc.trimOneTrailingNewline(template);
    CompiledST code = compile(getFileName(), enclosingTemplateName, null, template, templateToken);
    String mangled = getMangledRegionName(enclosingTemplateName, name);

    if (lookupTemplate(mangled) == null) {
      errMgr.compileTimeError(
          ErrorType.NO_SUCH_REGION, templateToken, regionT, enclosingTemplateName, name);
      return new CompiledST();
    }
    code.name = mangled;
    code.isRegion = true;
    code.regionDefType = ST.RegionType.EXPLICIT;
    code.templateDefStartToken = regionT;

    rawDefineTemplate(mangled, code, regionT);
    code.defineArgDefaultValueTemplates(this);
    code.defineImplicitlyDefinedTemplates(this);

    return code;
  }