/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.runtime.objects.text; import java.util.Objects; import com.github.anba.es6draft.regexp.RegExpMatcher; import com.github.anba.es6draft.runtime.Realm; import com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject; /** * <h1>21 Text Processing</h1><br> * <h2>21.2 RegExp (Regular Expression) Objects</h2> * <ul> * <li>21.2.6 Properties of RegExp Instances * </ul> */ public final class RegExpObject extends OrdinaryObject { /** [[OriginalSource]] */ private String originalSource; /** [[OriginalFlags]] */ private String originalFlags; private int flags; /** [[RegExpMatcher]] */ private RegExpMatcher regExpMatcher; /** * Constructs a new RegExp object. * * @param realm * the realm object */ public RegExpObject(Realm realm) { super(realm); } void initialize(String originalSource, String originalFlags, RegExpMatcher matcher) { this.originalSource = originalSource; this.originalFlags = originalFlags; this.flags = Flags.from(originalFlags); this.regExpMatcher = matcher; } enum Flags { Global, IgnoreCase, Multiline, Sticky, Unicode; int mask() { return 1 << ordinal(); } boolean isSet(int flags) { return (flags & mask()) != 0; } static Flags of(char c) { switch (c) { case 'g': return Global; case 'i': return IgnoreCase; case 'm': return Multiline; case 'u': return Unicode; case 'y': return Sticky; default: throw new AssertionError(); } } static int from(String flags) { int f = 0; for (int i = 0; i < flags.length(); ++i) { f |= of(flags.charAt(i)).mask(); } return f; } } boolean isSet(Flags flag) { return flag.isSet(flags); } /** * [[OriginalSource]] * * @return the regular expression source */ public String getOriginalSource() { return originalSource; } /** * [[OriginalFlags]] * * @return the regular expression flags */ public String getOriginalFlags() { return originalFlags; } /** * [[RegExpMatcher]] * * @return the regular expression matcher object */ public RegExpMatcher getRegExpMatcher() { return regExpMatcher; } @Override public String className() { return "RegExp"; } @Override public String toString() { return String.format("%s, matcher={%s}", super.toString(), Objects.toString(regExpMatcher)); } }