JavaScript-JSLint
view release on metacpan or search on metacpan
lib/JavaScript/JSLint.pm view on Meta::CPAN
bottom: array, br: object, braille: boolean, browser: boolean,
button: object, c, call: string, canvas: object, cap, caption: object,
'caption-side': array, ceil: string, center: object, charAt: *,
charCodeAt: *, character, cite: object, clear: array, clip: array, closure,
cm: boolean, code: object, col: object, colgroup: object, color,
combine_var: string, command: object, concat: string,
conditional_assignment: string, confusing_a: string,
confusing_regexp: string, confusion: boolean, constructor: string,
constructor_name_a: string, content: array, continue, control_a: string,
'counter-increment': array, 'counter-reset': array, create: *, css: string,
cursor: array, d, dangerous_comment: string, dangling_a: string,
data: function object, datalist: object, dd: object, debug,
defineProperties: string, defineProperty: string, del: object,
deleted: string, details: object, devel: boolean, dfn: object,
dialog: object, dir: object, direction: array, display: array,
disrupt: boolean, div: object, dl: object, dt: object, duplicate_a: string,
edge: string, edition: string, else, em: *, embed: object,
embossed: boolean, empty: boolean, 'empty-cells': array,
empty_block: string, empty_case: string, empty_class: string,
entityify: function, eqeq, errors: array, es5: string, eval, every: string,
evidence, evil: string, ex: boolean, exception, exec: *,
expected_a: string, expected_a_at_b_c: string, expected_a_b: string,
expected_a_b_from_c_d: string, expected_at_a: string,
expected_attribute_a: string, expected_attribute_value_a: string,
expected_class_a: string, expected_fraction_a: string,
expected_id_a: string, expected_identifier_a: string,
expected_identifier_a_reserved: string, expected_lang_a: string,
expected_linear_a: string, expected_media_a: string,
expected_name_a: string, expected_nonstandard_style_attribute: string,
expected_number_a: string, expected_operator_a: string,
expected_percent_a: string, expected_positive_a: string,
expected_pseudo_a: string, expected_selector_a: string,
expected_small_a: string, expected_space_a_b: string,
expected_string_a: string, expected_style_attribute: string,
expected_style_pattern: string, expected_tagname_a: string,
expected_type_a: string, f: string, fieldset: object, figure: object,
filter: *, first: *, flag, float: array, floor: *, font: *, 'font-family',
'font-size': array, 'font-size-adjust': array, 'font-stretch': array,
'font-style': array, 'font-variant': array, 'font-weight': array,
footer: object, for, forEach: *, for_if: string, forin, form: object,
fragment, frame: object, frameset: object, freeze: string, from: number,
fromCharCode: function, fud: function, funct: object, function,
function_block: string, function_eval: string, function_loop: string,
function_statement: string, function_strict: string, functions: array,
getDate: string, getDay: string, getFullYear: string, getHours: string,
getMilliseconds: string, getMinutes: string, getMonth: string,
getOwnPropertyDescriptor: string, getOwnPropertyNames: string,
getPrototypeOf: string, getSeconds: string, getTime: string,
getTimezoneOffset: string, getUTCDate: string, getUTCDay: string,
getUTCFullYear: string, getUTCHours: string, getUTCMilliseconds: string,
getUTCMinutes: string, getUTCMonth: string, getUTCSeconds: string,
getYear: string, global, globals, h1: object, h2: object, h3: object,
h4: object, h5: object, h6: object, handheld: boolean, hasOwnProperty: *,
head: object, header: object, height: array, hgroup: object, hr: object,
'hta:application': object, html: *, html_confusion_a: string,
html_handlers: string, i: object, id: string, identifier: boolean,
identifier_function: string, iframe: object, img: object, immed: boolean,
implied_evil: string, in, indent: number, indexOf: *, infix_in: string,
init: function, input: object, ins: object, insecure_a: string,
isAlpha: function, isArray: function boolean, isDigit: function,
isExtensible: string, isFrozen: string, isNaN: string,
isPrototypeOf: string, isSealed: string, join: *, jslint: function boolean,
json: boolean, kbd: object, keygen: object, keys: *, label: object,
label_a_b: string, labeled: boolean, lang: string, lastIndex: string,
lastIndexOf: *, lbp: number, leading_decimal_a: string, led: function,
left: array, legend: object, length: *, 'letter-spacing': array,
li: object, lib: boolean, line: number, 'line-height': array, link: object,
'list-style': array, 'list-style-image': array,
'list-style-position': array, 'list-style-type': array, map: *,
margin: array, 'margin-bottom', 'margin-left', 'margin-right',
'margin-top', mark: object, 'marker-offset': array, match: function,
'max-height': array, 'max-width': array, maxerr: number,
maxlen: number, member: object, menu: object, message, meta: object,
meter: object, 'min-height': function, 'min-width': function,
missing_a: string, missing_a_after_b: string, missing_option: string,
missing_property: string, missing_space_a_b: string, missing_url: string,
missing_use_strict: string, mixed: string, mm: boolean, mode: string,
move_invocation: string, move_var: string, n: string, name: string,
name_function: string, nav: object, nested_comment: string,
newcap: boolean, node: boolean, noframes: object, nomen, noscript: object,
not: string, not_a_constructor: string, not_a_defined: string,
not_a_function: string, not_a_label: string, not_a_scope: string,
not_greater: string, now: string, nud: function, number: number,
object: object, ol: object, on, opacity, open: boolean, optgroup: object,
option: object, outer: regexp, outline: array, 'outline-color': array,
'outline-style': array, 'outline-width', output: object, overflow: array,
'overflow-x': array, 'overflow-y': array, p: object, padding: array,
'padding-bottom': function, 'padding-left': function,
'padding-right': function, 'padding-top': function,
'page-break-after': array, 'page-break-before': array, param: object,
parameter_a_get_b: string, parameter_set_a: string, params: array,
paren: boolean, parent: string, parse: string, passfail, pc: boolean,
plusplus, pop: *, position: array, postscript: boolean, pre: object,
predef, preventExtensions: string, print: boolean, progress: object,
projection: boolean, properties: boolean, propertyIsEnumerable: string,
prototype: string, pt: boolean, push: *, px: boolean, q: object, quote,
quotes: array, r: string, radix: string, range: function, raw,
read_only: string, reason, redefinition_a: string, reduce: string,
reduceRight: string, regexp, replace: function, report: function,
reserved: boolean, reserved_a: string, reverse: string, rhino: boolean,
right: array, rp: object, rt: object, ruby: object, safe: boolean,
samp: object, scanned_a_b: string, screen: boolean, script: object,
seal: string, search: function, second: *, section: object, select: object,
setDate: string, setDay: string, setFullYear: string, setHours: string,
setMilliseconds: string, setMinutes: string, setMonth: string,
setSeconds: string, setTime: string, setTimezoneOffset: string,
setUTCDate: string, setUTCDay: string, setUTCFullYear: string,
setUTCHours: string, setUTCMilliseconds: string, setUTCMinutes: string,
setUTCMonth: string, setUTCSeconds: string, setYear: string, shift: *,
slash_equal: string, slice: string, sloppy, small: object, some: string,
sort: *, source: object, span: object, speech: boolean, splice: string,
split: function, src, statement_block: string, stopping: string,
strange_loop: string, strict: string, string: string, stringify: string,
strong: object, style: *, styleproperty: regexp, sub: object,
subscript: string, substr: *, substring: string, sup: object,
supplant: function, t: string, table: object, 'table-layout': array,
tag_a_in_b: string, tbody: object, td: object, test: *,
'text-align': array, 'text-decoration': array, 'text-indent': function,
'text-shadow': array, 'text-transform': array, textarea: object,
tfoot: object, th: object, thead: object, third: array, thru: number,
time: object, title: object, toDateString: string, toExponential: string,
lib/JavaScript/JSLint.pm view on Meta::CPAN
deleted: "Only properties should be deleted.",
duplicate_a: "Duplicate '{a}'.",
empty_block: "Empty block.",
empty_case: "Empty case.",
empty_class: "Empty class.",
es5: "This is an ES5 feature.",
evil: "eval is evil.",
expected_a: "Expected '{a}'.",
expected_a_b: "Expected '{a}' and instead saw '{b}'.",
expected_a_b_from_c_d: "Expected '{a}' to match '{b}' from line " +
"{c} and instead saw '{d}'.",
expected_at_a: "Expected an at-rule, and instead saw @{a}.",
expected_a_at_b_c: "Expected '{a}' at column {b}, not column {c}.",
expected_attribute_a: "Expected an attribute, and instead saw [{a}].",
expected_attribute_value_a: "Expected an attribute value and " +
"instead saw '{a}'.",
expected_class_a: "Expected a class, and instead saw .{a}.",
expected_fraction_a: "Expected a number between 0 and 1 and " +
"instead saw '{a}'",
expected_id_a: "Expected an id, and instead saw #{a}.",
expected_identifier_a: "Expected an identifier and instead saw '{a}'.",
expected_identifier_a_reserved: "Expected an identifier and " +
"instead saw '{a}' (a reserved word).",
expected_linear_a: "Expected a linear unit and instead saw '{a}'.",
expected_lang_a: "Expected a lang code, and instead saw :{a}.",
expected_media_a: "Expected a CSS media type, and instead saw '{a}'.",
expected_name_a: "Expected a name and instead saw '{a}'.",
expected_nonstandard_style_attribute: "Expected a non-standard " +
"style attribute and instead saw '{a}'.",
expected_number_a: "Expected a number and instead saw '{a}'.",
expected_operator_a: "Expected an operator and instead saw '{a}'.",
expected_percent_a: "Expected a percentage and instead saw '{a}'",
expected_positive_a: "Expected a positive number and instead saw '{a}'",
expected_pseudo_a: "Expected a pseudo, and instead saw :{a}.",
expected_selector_a: "Expected a CSS selector, and instead saw {a}.",
expected_small_a: "Expected a small positive integer and instead saw '{a}'",
expected_space_a_b: "Expected exactly one space between '{a}' and '{b}'.",
expected_string_a: "Expected a string and instead saw {a}.",
expected_style_attribute: "Excepted a style attribute, and instead saw '{a}'.",
expected_style_pattern: "Expected a style pattern, and instead saw '{a}'.",
expected_tagname_a: "Expected a tagName, and instead saw {a}.",
expected_type_a: "Expected a type, and instead saw {a}.",
for_if: "The body of a for in should be wrapped in an if " +
"statement to filter unwanted properties from the prototype.",
function_block: "Function statements should not be placed in blocks. " +
"Use a function expression or move the statement to the top of " +
"the outer function.",
function_eval: "The Function constructor is eval.",
function_loop: "Don't make functions within a loop.",
function_statement: "Function statements are not invocable. " +
"Wrap the whole function invocation in parens.",
function_strict: "Use the function form of 'use strict'.",
html_confusion_a: "HTML confusion in regular expression '<{a}'.",
html_handlers: "Avoid HTML event handlers.",
identifier_function: "Expected an identifier in an assignment " +
"and instead saw a function invocation.",
implied_evil: "Implied eval is evil. Pass a function instead of a string.",
infix_in: "Unexpected 'in'. Compare with undefined, or use the " +
"hasOwnProperty method instead.",
insecure_a: "Insecure '{a}'.",
isNaN: "Use the isNaN function to compare with NaN.",
label_a_b: "Label '{a}' on '{b}' statement.",
lang: "lang is deprecated.",
leading_decimal_a: "A leading decimal point can be confused with a dot: '.{a}'.",
missing_a: "Missing '{a}'.",
missing_a_after_b: "Missing '{a}' after '{b}'.",
missing_option: "Missing option value.",
missing_property: "Missing property name.",
missing_space_a_b: "Missing space between '{a}' and '{b}'.",
missing_url: "Missing url.",
missing_use_strict: "Missing 'use strict' statement.",
mixed: "Mixed spaces and tabs.",
move_invocation: "Move the invocation into the parens that " +
"contain the function.",
move_var: "Move 'var' declarations to the top of the function.",
name_function: "Missing name in function statement.",
nested_comment: "Nested comment.",
not: "Nested not.",
not_a_constructor: "Do not use {a} as a constructor.",
not_a_defined: "'{a}' has not been fully defined yet.",
not_a_function: "'{a}' is not a function.",
not_a_label: "'{a}' is not a label.",
not_a_scope: "'{a}' is out of scope.",
not_greater: "'{a}' should not be greater than '{b}'.",
parameter_a_get_b: "Unexpected parameter '{a}' in get {b} function.",
parameter_set_a: "Expected parameter (value) in set {a} function.",
radix: "Missing radix parameter.",
read_only: "Read only.",
redefinition_a: "Redefinition of '{a}'.",
reserved_a: "Reserved name '{a}'.",
scanned_a_b: "{a} ({b}% scanned).",
slash_equal: "A regular expression literal can be confused with '/='.",
statement_block: "Expected to see a statement and instead saw a block.",
stopping: "Stopping. ",
strange_loop: "Strange loop.",
strict: "Strict violation.",
subscript: "['{a}'] is better written in dot notation.",
tag_a_in_b: "A '<{a}>' must be within '<{b}>'.",
too_long: "Line too long.",
too_many: "Too many errors.",
trailing_decimal_a: "A trailing decimal point can be confused " +
"with a dot: '.{a}'.",
type: "type is unnecessary.",
type_confusion_a_b: "Type confusion: {a} and {b}.",
unclosed: "Unclosed string.",
unclosed_comment: "Unclosed comment.",
unclosed_regexp: "Unclosed regular expression.",
unescaped_a: "Unescaped '{a}'.",
unexpected_a: "Unexpected '{a}'.",
unexpected_char_a_b: "Unexpected character '{a}' in {b}.",
unexpected_comment: "Unexpected comment.",
unexpected_property_a: "Unexpected /*property*/ '{a}'.",
unexpected_space_a_b: "Unexpected space between '{a}' and '{b}'.",
unnecessary_initialize: "It is not necessary to initialize '{a}' " +
"to 'undefined'.",
unnecessary_use: "Unnecessary 'use strict'.",
unreachable_a_b: "Unreachable '{a}' after '{b}'.",
unrecognized_style_attribute_a: "Unrecognized style attribute '{a}'.",
unrecognized_tag_a: "Unrecognized tag '<{a}>'.",
unsafe: "Unsafe character.",
url: "JavaScript URL.",
lib/JavaScript/JSLint.pm view on Meta::CPAN
tt: {},
u: {},
ul: {},
'var': {},
video: {}
},
ids, // HTML ids
in_block,
indent,
// infer_statement,// Inference rules for statements
is_type = array_to_object([
'*', 'array', 'boolean', 'function', 'number', 'object',
'regexp', 'string'
], true),
itself, // JSLint itself
jslint_limit = {
indent: 10,
maxerr: 1000,
maxlen: 256
},
json_mode,
lex, // the tokenizer
lines,
lookahead,
member,
node = array_to_object([
'Buffer', 'clearInterval', 'clearTimeout', 'console', 'exports',
'global', 'module', 'process', 'querystring', 'require',
'setInterval', 'setTimeout', '__dirname', '__filename'
], false),
node_js,
numbery = array_to_object(['indexOf', 'lastIndexOf', 'search'], true),
next_token,
option,
predefined, // Global variables defined by option
prereg,
prev_token,
property_type,
regexp_flag = array_to_object(['g', 'i', 'm'], true),
return_this = function return_this() {
return this;
},
rhino = array_to_object([
'defineClass', 'deserialize', 'gc', 'help', 'load', 'loadClass',
'print', 'quit', 'readFile', 'readUrl', 'runCommand', 'seal',
'serialize', 'spawn', 'sync', 'toint32', 'version'
], false),
scope, // An object containing an object for each variable in scope
semicolon_coda = array_to_object([';', '"', '\'', ')'], true),
src,
stack,
// standard contains the global names that are provided by the
// ECMAScript standard.
standard = array_to_object([
'Array', 'Boolean', 'Date', 'decodeURI', 'decodeURIComponent',
'encodeURI', 'encodeURIComponent', 'Error', 'eval', 'EvalError',
'Function', 'isFinite', 'isNaN', 'JSON', 'Math', 'Number', 'Object',
'parseInt', 'parseFloat', 'RangeError', 'ReferenceError', 'RegExp',
'String', 'SyntaxError', 'TypeError', 'URIError'
], false),
standard_property_type = {
E : 'number',
LN2 : 'number',
LN10 : 'number',
LOG2E : 'number',
LOG10E : 'number',
MAX_VALUE : 'number',
MIN_VALUE : 'number',
NEGATIVE_INFINITY : 'number',
PI : 'number',
POSITIVE_INFINITY : 'number',
SQRT1_2 : 'number',
SQRT2 : 'number',
apply : 'function',
bind : 'function function',
call : 'function',
ceil : 'function number',
charAt : 'function string',
concat : 'function',
constructor : 'function object',
create : 'function object',
defineProperty : 'function object',
defineProperties : 'function object',
every : 'function boolean',
exec : 'function array',
filter : 'function array',
floor : 'function number',
forEach : 'function',
freeze : 'function object',
getDate : 'function number',
getDay : 'function number',
getFullYear : 'function number',
getHours : 'function number',
getMilliseconds : 'function number',
getMinutes : 'function number',
getMonth : 'function number',
getOwnPropertyDescriptor
: 'function object',
getOwnPropertyNames : 'function array',
getPrototypeOf : 'function object',
getSeconds : 'function number',
getTime : 'function number',
getTimezoneOffset : 'function number',
getUTCDate : 'function number',
getUTCDay : 'function number',
getUTCFullYear : 'function number',
getUTCHours : 'function number',
getUTCMilliseconds : 'function number',
getUTCMinutes : 'function number',
getUTCMonth : 'function number',
getUTCSeconds : 'function number',
getYear : 'function number',
hasOwnProperty : 'function boolean',
indexOf : 'function number',
isExtensible : 'function boolean',
isFrozen : 'function boolean',
lib/JavaScript/JSLint.pm view on Meta::CPAN
x.string = name;
x.nud = return_this;
return x;
}
function reservevar(s, v) {
return reserve(s, function () {
if (typeof v === 'function') {
v(this);
}
return this;
});
}
function infix(s, p, f, type, w) {
var x = symbol(s, p);
reserve_name(x);
x.led = function (left) {
this.arity = 'infix';
if (!w) {
spaces(prev_token, token);
spaces();
}
if (!option.bitwise && this.bitwise) {
warn('unexpected_a', this);
}
if (typeof f === 'function') {
return f(left, this);
} else {
this.first = left;
this.second = expression(p);
return this;
}
};
if (type) {
x.type = type;
}
return x;
}
function expected_relation(node, message) {
if (node.assign) {
warn(message || bundle.conditional_assignment, node);
}
return node;
}
function expected_condition(node, message) {
switch (node.id) {
case '[':
case '-':
if (node.arity !== 'infix') {
warn(message || bundle.weird_condition, node);
}
break;
case 'false':
case 'function':
case 'Infinity':
case 'NaN':
case 'null':
case 'true':
case 'undefined':
case 'void':
case '(number)':
case '(regexp)':
case '(string)':
case '{':
warn(message || bundle.weird_condition, node);
break;
case '(':
if (node.first.id === '.' && numbery[node.first.second.string] === true) {
warn(message || bundle.weird_condition, node);
}
break;
}
return node;
}
function check_relation(node) {
switch (node.arity) {
case 'prefix':
switch (node.id) {
case '{':
case '[':
warn('unexpected_a', node);
break;
case '!':
warn('confusing_a', node);
break;
}
break;
case 'function':
case 'regexp':
warn('unexpected_a', node);
break;
default:
if (node.id === 'NaN') {
warn('isnan', node);
}
}
return node;
}
function relation(s, eqeq) {
return infix(s, 100, function (left, that) {
check_relation(left);
if (eqeq && !option.eqeq) {
warn('expected_a_b', that, eqeq, that.id);
}
var right = expression(100);
if (are_similar(left, right) ||
((left.id === '(string)' || left.id === '(number)') &&
(right.id === '(string)' || right.id === '(number)'))) {
warn('weird_relation', that);
}
that.first = left;
that.second = check_relation(right);
return that;
}, 'boolean');
}
function assignop(s, op) {
var x = infix(s, 20, function (left, that) {
var l;
that.first = left;
if (left.identifier) {
if (scope[left.string]) {
if (scope[left.string].writeable === false) {
warn('read_only', left);
}
} else {
stop('read_only');
}
} else if (option.safe) {
l = left;
do {
if (typeof predefined[l.string] === 'boolean') {
warn('adsafe_a', l);
}
l = l.first;
} while (l);
}
if (left === syntax['function']) {
warn('identifier_function', token);
}
if (left.id === '.' || left.id === '[') {
if (!left.first || left.first.string === 'arguments') {
warn('bad_assignment', that);
}
} else if (left.identifier && !left.reserved) {
if (funct[left.string] === 'exception') {
warn('assign_exception', left);
}
}
that.second = expression(19);
lib/JavaScript/JSLint.pm view on Meta::CPAN
}
}
}
return this;
},
led: function () {
stop('expected_operator_a');
}
};
// Build the syntax table by declaring the syntactic elements.
type('(array)', 'array');
type('(color)', 'color');
type('(function)', 'function');
type('(number)', 'number', return_this);
type('(object)', 'object');
type('(string)', 'string', return_this);
type('(boolean)', 'boolean', return_this);
type('(range)', 'range');
type('(regexp)', 'regexp', return_this);
ultimate('(begin)');
ultimate('(end)');
ultimate('(error)');
postscript(symbol('</'));
symbol('<!');
symbol('<!--');
symbol('-->');
postscript(symbol('}'));
symbol(')');
symbol(']');
postscript(symbol('"'));
postscript(symbol('\''));
symbol(';');
symbol(':');
symbol(',');
symbol('#');
symbol('@');
symbol('*/');
postscript(reserve('case'));
reserve('catch');
postscript(reserve('default'));
reserve('else');
reserve('finally');
reservevar('arguments', function (x) {
if (strict_mode && funct === global_funct) {
warn('strict', x);
} else if (option.safe) {
warn('adsafe_a', x);
}
});
reservevar('eval', function (x) {
if (option.safe) {
warn('adsafe_a', x);
}
});
constant('false', 'boolean');
constant('Infinity', 'number');
constant('NaN', 'number');
constant('null', '');
reservevar('this', function (x) {
if (option.safe) {
warn('adsafe_a', x);
} else if (strict_mode && funct['(token)'].arity === 'statement' &&
funct['(name)'].charAt(0) > 'Z') {
warn('strict', x);
}
});
constant('true', 'boolean');
constant('undefined', '');
infix('?', 30, function (left, that) {
step_in('?');
that.first = expected_condition(expected_relation(left));
that.second = expression(0);
spaces();
step_out();
var colon = next_token;
advance(':');
step_in(':');
spaces();
that.third = expression(10);
that.arity = 'ternary';
if (are_similar(that.second, that.third)) {
warn('weird_ternary', colon);
} else if (are_similar(that.first, that.second)) {
warn('use_or', that);
}
step_out();
return that;
});
infix('||', 40, function (left, that) {
function paren_check(that) {
if (that.id === '&&' && !that.paren) {
warn('and', that);
}
return that;
}
that.first = paren_check(expected_condition(expected_relation(left)));
that.second = paren_check(expected_relation(expression(40)));
if (are_similar(that.first, that.second)) {
warn('weird_condition', that);
}
return that;
});
infix('&&', 50, function (left, that) {
that.first = expected_condition(expected_relation(left));
that.second = expected_relation(expression(50));
if (are_similar(that.first, that.second)) {
warn('weird_condition', that);
}
return that;
});
prefix('void', function () {
this.first = expression(0);
lib/JavaScript/JSLint.pm view on Meta::CPAN
one_space();
this.block = block(true);
if (this.block.disrupt) {
warn('strange_loop', prev_token);
}
funct['(breakage)'] -= 1;
funct['(loopage)'] -= 1;
return this;
});
reserve('with');
labeled_stmt('switch', function () {
// switch.first the switch expression
// switch.second the array of cases. A case is 'case' or 'default' token:
// case.first the array of case expressions
// case.second the array of statements
// If all of the arrays of statements are disrupt, then the switch is disrupt.
var cases = [],
old_in_block = in_block,
particular,
the_case = next_token,
unbroken = true;
function find_duplicate_case(value) {
if (are_similar(particular, value)) {
warn('duplicate_a', value);
}
}
funct['(breakage)'] += 1;
one_space();
advance('(');
no_space();
step_in();
this.arity = 'statement';
this.first = expected_condition(expected_relation(expression(0)));
no_space();
step_out(')', the_case);
one_space();
advance('{');
step_in();
in_block = true;
this.second = [];
while (next_token.id === 'case') {
the_case = next_token;
cases.forEach(find_duplicate_case);
the_case.first = [];
the_case.arity = 'case';
spaces();
edge('case');
advance('case');
for (;;) {
one_space();
particular = expression(0);
cases.forEach(find_duplicate_case);
cases.push(particular);
the_case.first.push(particular);
if (particular.id === 'NaN') {
warn('unexpected_a', particular);
}
no_space_only();
advance(':');
if (next_token.id !== 'case') {
break;
}
spaces();
edge('case');
advance('case');
}
spaces();
the_case.second = statements();
if (the_case.second && the_case.second.length > 0) {
particular = the_case.second[the_case.second.length - 1];
if (particular.disrupt) {
if (particular.id === 'break') {
unbroken = false;
}
} else {
warn('missing_a_after_b', next_token, 'break', 'case');
}
} else {
warn('empty_case');
}
this.second.push(the_case);
}
if (this.second.length === 0) {
warn('missing_a', next_token, 'case');
}
if (next_token.id === 'default') {
spaces();
the_case = next_token;
the_case.arity = 'case';
edge('case');
advance('default');
no_space_only();
advance(':');
spaces();
the_case.second = statements();
if (the_case.second && the_case.second.length > 0) {
particular = the_case.second[the_case.second.length - 1];
if (unbroken && particular.disrupt && particular.id !== 'break') {
this.disrupt = true;
}
}
this.second.push(the_case);
}
funct['(breakage)'] -= 1;
spaces();
step_out('}', this);
in_block = old_in_block;
return this;
});
stmt('debugger', function () {
if (!option.debug) {
warn('unexpected_a', this);
}
this.arity = 'statement';
( run in 0.388 second using v1.01-cache-2.11-cpan-6b5c3043376 )