Skip to content
Permalink
Browse files

Remove stringParams and trackIds mode

Closes #1145
  • Loading branch information
machty committed Dec 10, 2015
1 parent 205c61c commit 3f77b82ed00dc1d71976de76bd4f8dfb6e885f2a
@@ -49,8 +49,6 @@ Compiler.prototype = {
this.opcodes = [];
this.children = [];
this.options = options;
this.stringParams = options.stringParams;
this.trackIds = options.trackIds;

options.blockParams = options.blockParams || [];

@@ -393,49 +391,7 @@ Compiler.prototype = {
},

pushParam: function(val) {
let value = val.value != null ? val.value : val.original || '';

if (this.stringParams) {
if (value.replace) {
value = value
.replace(/^(\.?\.\/)*/g, '')
.replace(/\//g, '.');
}

if (val.depth) {
this.addDepth(val.depth);
}
this.opcode('getContext', val.depth || 0);
this.opcode('pushStringParam', value, val.type);

if (val.type === 'SubExpression') {
// SubExpressions get evaluated and passed in
// in string params mode.
this.accept(val);
}
} else {
if (this.trackIds) {
let blockParamIndex;
if (val.parts && !AST.helpers.scopedId(val) && !val.depth) {
blockParamIndex = this.blockParamIndex(val.parts[0]);
}
if (blockParamIndex) {
let blockParamChild = val.parts.slice(1).join('.');
this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);
} else {
value = val.original || value;
if (value.replace) {
value = value
.replace(/^this(?:\.|$)/, '')
.replace(/^\.\//, '')
.replace(/^\.$/, '');
}

this.opcode('pushId', val.type, value);
}
}
this.accept(val);
}
this.accept(val);
},

setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) {
@@ -57,8 +57,6 @@ JavaScriptCompiler.prototype = {
compile: function(environment, options, context, asObject) {
this.environment = environment;
this.options = options;
this.stringParams = this.options.stringParams;
this.trackIds = this.options.trackIds;
this.precompile = !asObject;

this.name = this.environment.name;
@@ -498,37 +496,7 @@ JavaScriptCompiler.prototype = {
this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);
},

// [pushStringParam]
//
// On stack, before: ...
// On stack, after: string, currentContext, ...
//
// This opcode is designed for use in string mode, which
// provides the string value of a parameter along with its
// depth rather than resolving it immediately.
pushStringParam: function(string, type) {
this.pushContext();
this.pushString(type);

// If it's a subexpression, the string result
// will be pushed after this opcode.
if (type !== 'SubExpression') {
if (typeof string === 'string') {
this.pushString(string);
} else {
this.pushStackLiteral(string);
}
}
},

emptyHash: function(omitEmpty) {
if (this.trackIds) {
this.push('{}'); // hashIds
}
if (this.stringParams) {
this.push('{}'); // hashContexts
this.push('{}'); // hashTypes
}
this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');
},
pushHash: function() {
@@ -541,14 +509,6 @@ JavaScriptCompiler.prototype = {
let hash = this.hash;
this.hash = this.hashes.pop();

if (this.trackIds) {
this.push(this.objectLiteral(hash.ids));
}
if (this.stringParams) {
this.push(this.objectLiteral(hash.contexts));
this.push(this.objectLiteral(hash.types));
}

this.push(this.objectLiteral(hash.values));
},

@@ -727,44 +687,7 @@ JavaScriptCompiler.prototype = {
//
// Pops a value off the stack and assigns it to the current hash
assignToHash: function(key) {
let value = this.popStack(),
context,
type,
id;

if (this.trackIds) {
id = this.popStack();
}
if (this.stringParams) {
type = this.popStack();
context = this.popStack();
}

let hash = this.hash;
if (context) {
hash.contexts[key] = context;
}
if (type) {
hash.types[key] = type;
}
if (id) {
hash.ids[key] = id;
}
hash.values[key] = value;
},

pushId: function(type, name, child) {
if (type === 'BlockParam') {
this.pushStackLiteral(
'blockParams[' + name[0] + '].path[' + name[1] + ']'
+ (child ? ' + ' + JSON.stringify('.' + child) : ''));
} else if (type === 'PathExpression') {
this.pushString(name);
} else if (type === 'SubExpression') {
this.pushStackLiteral('true');
} else {
this.pushStackLiteral('null');
}
this.hash.values[key] = this.popStack();
},

// HELPERS
@@ -997,9 +920,6 @@ JavaScriptCompiler.prototype = {

setupParams: function(helper, paramSize, params) {
let options = {},
contexts = [],
types = [],
ids = [],
objectArgs = !params,
param;

@@ -1010,14 +930,6 @@ JavaScriptCompiler.prototype = {
options.name = this.quotedString(helper);
options.hash = this.popStack();

if (this.trackIds) {
options.hashIds = this.popStack();
}
if (this.stringParams) {
options.hashTypes = this.popStack();
options.hashContexts = this.popStack();
}

let inverse = this.popStack(),
program = this.popStack();

@@ -1034,28 +946,12 @@ JavaScriptCompiler.prototype = {
while (i--) {
param = this.popStack();
params[i] = param;

if (this.trackIds) {
ids[i] = this.popStack();
}
if (this.stringParams) {
types[i] = this.popStack();
contexts[i] = this.popStack();
}
}

if (objectArgs) {
options.args = this.source.generateArray(params);
}

if (this.trackIds) {
options.ids = this.source.generateArray(ids);
}
if (this.stringParams) {
options.types = this.source.generateArray(types);
options.contexts = this.source.generateArray(contexts);
}

if (this.options.data) {
options.data = 'data';
}
@@ -1,4 +1,4 @@
import {appendContextPath, createFrame, isArray} from '../utils';
import {isArray} from '../utils';

export default function(instance) {
instance.registerHelper('blockHelperMissing', function(context, options) {
@@ -11,21 +11,11 @@ export default function(instance) {
return inverse(this);
} else if (isArray(context)) {
if (context.length > 0) {
if (options.ids) {
options.ids = [options.name];
}

return instance.helpers.each(context, options);
} else {
return inverse(this);
}
} else {
if (options.data && options.ids) {
let data = createFrame(options.data);
data.contextPath = appendContextPath(options.data.contextPath, options.name);
options = {data: data};
}

return fn(context, options);
}
});
@@ -1,4 +1,4 @@
import {appendContextPath, blockParams, createFrame, isArray, isFunction} from '../utils';
import {createFrame, isArray, isFunction} from '../utils';
import Exception from '../exception';

export default function(instance) {
@@ -11,12 +11,7 @@ export default function(instance) {
inverse = options.inverse,
i = 0,
ret = '',
data,
contextPath;

if (options.data && options.ids) {
contextPath = appendContextPath(options.data.contextPath, options.ids[0]) + '.';
}
data;

if (isFunction(context)) { context = context.call(this); }

@@ -30,15 +25,11 @@ export default function(instance) {
data.index = index;
data.first = index === 0;
data.last = !!last;

if (contextPath) {
data.contextPath = contextPath + field;
}
}

ret = ret + fn(context[field], {
data: data,
blockParams: blockParams([context[field], field], [contextPath + field, null])
blockParams: [context[field], field]
});
}

@@ -1,4 +1,4 @@
import {appendContextPath, blockParams, createFrame, isEmpty, isFunction} from '../utils';
import {isEmpty, isFunction} from '../utils';

export default function(instance) {
instance.registerHelper('with', function(context, options) {
@@ -8,14 +8,10 @@ export default function(instance) {

if (!isEmpty(context)) {
let data = options.data;
if (options.data && options.ids) {
data = createFrame(options.data);
data.contextPath = appendContextPath(options.data.contextPath, options.ids[0]);
}

return fn(context, {
data: data,
blockParams: blockParams([context], [data && data.contextPath])
blockParams: [context]
});
} else {
return options.inverse(this);
@@ -38,9 +38,6 @@ export function template(templateSpec, env) {
function invokePartialWrapper(partial, context, options) {
if (options.hash) {
context = Utils.extend({}, context, options.hash);
if (options.ids) {
options.ids[0] = true;
}
}

partial = env.VM.resolvePartial.call(this, partial, context, options);
@@ -224,9 +221,6 @@ export function resolvePartial(partial, context, options) {

export function invokePartial(partial, context, options) {
options.partial = true;
if (options.ids) {
options.data.contextPath = options.ids[0] || options.data.contextPath;
}

let partialBlock;
if (options.fn && options.fn !== noop) {
@@ -98,11 +98,3 @@ export function createFrame(object) {
return frame;
}

export function blockParams(params, ids) {
params.path = ids;
return params;
}

export function appendContextPath(contextPath, id) {
return (contextPath ? contextPath + '.' : '') + id;
}
@@ -16,7 +16,6 @@ var template = Handlebars.precompile(script, {
assumeObjects: true,
compat: false,
strict: true,
trackIds: true,
knownHelpersOnly: false
});

0 comments on commit 3f77b82

Please sign in to comment.
You can’t perform that action at this time.